Python Selenium,Scraping dynamic down down

时间:2017-11-17 04:02:35

标签: python selenium

我正在使用Selenium和python进行网页抓取以及我用来测试此link

的页面

但问题是我无法处理下拉动态内容,这里出现了问题

在选择状态时,城市根据状态加载,据我所知,有些Php和js在后端。

所以,我在网上搜索并提供了一个等待一段时间的解决方案,请使用此link作为参考。

以下是我的代码的一部分

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

from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

chrome_path = r"E:\chromedriver.exe"

driver = webdriver.Chrome(chrome_path)

driver.get("http://www.blooddonors.in")
select = Select(driver.find_element_by_xpath('/html/body/table[3]/tbody/tr/td[2]/table[1]/tbody/tr/td/form/table/tbody/tr[2]/td[1]/select'))

select.select_by_visible_text('Tamil Nadu')
driver.implicitly_wait(60)
drop = Select(driver.find_element_by_xpath('//*[@id="div_city"]/select'))
select.select_by_visible_text('Coimbotore')

我正在使用Windows系统,我尝试使用CMD。它不需要等待功能,没有它就可以正常工作。

我面临的错误是:

raise NoSuchElementException("Could not locate element with visible text: %s" % text)
selenium.common.exceptions.NoSuchElementException: Message: Could not locate element with visible text: Coimbotore

但他们实际上是他们的。

如果有人可以帮我解决问题,那就太棒了,我可以继续下一步。

谢谢

3 个答案:

答案 0 :(得分:0)

Selenium提供了一个select类,可用于从下拉菜单中获取元素。

select = Select(driver.find_element_by_id('city'))
select.select_by_value('430') #search by value, coimbotore is 430

答案 1 :(得分:0)

要选择 Tamilnadu ,然后选择 Coimbotore ,您可以使用以下代码块:

driver.get("http://www.blooddonors.in")
select = Select(driver.find_element_by_name('select'))
select.select_by_visible_text('Tamil Nadu')
drop = Select(driver.find_element_by_name('city'))
city_option = WebDriverWait(driver, 5).until(lambda x: x.find_element_by_xpath("//select[@name='city']/option[text()='Coimbotore']"))
city_option.click()

答案 2 :(得分:0)

当您仍在尝试处理没有drop选项的第一个下拉列表(select)时,您的第二个下拉列表定义为"Coimbotore"

只需替换

drop = Select(driver.find_element_by_xpath('//*[@id="div_city"]/select'))
select.select_by_visible_text('Coimbotore')

drop = Select(driver.find_element_by_xpath('//select[@name="city" and count(option) > 1]'))
drop.select_by_visible_text('Coimbotore')