【问题标题】:Crawling website using selenium in firefox with python使用 python 在 Firefox 中使用 selenium 爬行网站
【发布时间】:2015-04-16 19:21:32
【问题描述】:

我写了一个简单的爬虫程序来爬取“http://fortune.com/fortune500/”,想获取<option value = "...">...</option>的值,但是使用webelement.text获取带有标签名(“option”)的内容时,什么都没有显示.我想知道为什么?谁能帮我解决这个问题?

# -*- coding: utf-8 -*-

import mechanize
from bs4 import BeautifulSoup
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re


#-----------selenium part(ignored)----------------#

browser = webdriver.Chrome() # Get local session of firefox
browser.get("http://fortune.com/fortune500/")

time.sleep(1) # Let the page load, will be added to the API

industry_button = browser.find_element_by_name('filters[Industry]')

print industry_button

count = 0;
industry_value = industry_button.find_elements_by_tag_name('option')

for number in industry_value:
    count += 1
    print number
print count

【问题讨论】:

    标签: python firefox selenium selenium-webdriver


    【解决方案1】:

    Selenium 使得处理select->option HTML 结构变得容易——Select class 提供了一个易于使用的界面。例如,.options 将列出所有可用选项。对于每个选项,您可以获取 .text 以获取内部 HTML 或 .get_attribute('value') 以获取 value 属性的值。

    另外,明确地等待切换按钮出现,而不是 time.sleep()

    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import Select
    
    
    browser = webdriver.Chrome()
    browser.get("http://fortune.com/fortune500/")
    
    # toggle
    toggle = WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "filter-toggle")))
    toggle.click()
    
    # get all options
    industry_button = Select(browser.find_element_by_name("filters[Industry]"))
    for option in industry_button.options:
        print option.text
    

    打印:

    Industry: Any
    Advertising, marketing
    Aerospace and Defense
    Airlines
    Apparel
    Automotive Retailing, Services
    Beverages
    ...
    

    【讨论】:

    • 非常感谢!它确实帮助我弄清楚了等待和选择()的概念;这对我帮助很大!
    【解决方案2】:

    .text 返回该元素的innerHTML,而不是值。你想获得value 属性。

    大概是这样的:

    element.get_attribute('value')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多