【问题标题】:Selenium drop down option unable to web scrapeSelenium 下拉选项无法进行网页抓取
【发布时间】:2019-01-21 19:43:08
【问题描述】:

所以我必须从https://auto-buy.geico.com/nb#/sale/vehicle/gskmsi/ 网上抓取汽车年份、型号和制造的信息(如果链接不起作用,请转到'https://geico.com',将邮政编码填写为'75002',在客户信息中输入随机详细信息,您将进入车辆信息链接)。

浏览了各种答案后,我发现我不能使用 mechanize 或类似的东西,因为每次我在菜单中选择一个选项时浏览器都会发送 JavaScript 请求。剩下像 Selenium 这样的东西可以帮助我。

以下是我的代码:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from bs4 import BeautifulSoup
from selenium import webdriver


driver = webdriver.Ie("IEDriverServer.exe")
WebDriverWait(driver, 10)
driver.get('https://auto-buy.geico.com/nb#/sale/customerinformation/gskmsi')
html = driver.page_source
soup = BeautifulSoup(html)

select = Select(driver.find_element_by_id('vehicleYear'))
print(select)

输出为空 [],因为它无法找到表单。

请告诉我如何从页面的表单中选择数据。

P.S.:虽然我用过 IE,但也欢迎使用 Mozilla 或 Chrome 进行任何代码修正。

【问题讨论】:

    标签: python selenium web-scraping


    【解决方案1】:
    1. 您需要使用 Selenium 填写“客户”选项卡中的所有信息,然后等待此选择元素的出现:

      from selenium.webdriver.support import ui
      
      
      select_element = ui.Select(ui.WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, "vehicleYear"))))
      
    2. 然后选择一个需要的选项:

      select_element.select_by_visible_text("2017")
      

    希望对你有帮助!

    【讨论】:

    • 嘿,最后一行显示错误,因为 select_element 没有 'select_by_visible_text()' 。我尝试将其重写为(在导入“from selenium.webdriver.support.select import Select”之后):Select(select_element).select_by_visible_text("2017") 但不幸的是它没有返回
    • @NikhilNair,对不起,我已经更新了我的答案。请立即检查。
    • 非常感谢。它有帮助。我对硒有点天真。我不想要确切的代码,但你能告诉我在上述步骤之后如何继续,我应该提取什么来获取模型和汽车制造商吗?
    • @NikhilNair,您可以在第一次选择后添加简单的等待time.sleep(2),然后逐步选择其他元素。
    • @NikhilNair,如果我的回答有帮助 - 请在我的回答附近打勾。
    猜你喜欢
    • 2022-12-19
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2019-04-06
    • 2019-06-23
    相关资源
    最近更新 更多