【问题标题】:Selecting values from drop down of website through selenium Python通过 selenium Python 从网站的下拉列表中选择值
【发布时间】:2019-12-11 00:45:43
【问题描述】:

我正在尝试使用 Python selenium 进行网页抓取。我收到以下错误:消息:元素不可交互(会话信息:chrome=78.0.3904.108)我正在尝试通过 id、值或文本访问选项元素。它给了我这个错误。我正在使用 Python-3。有人可以帮助解释我哪里出错了。我使用 xpath 使用 select 标记,还尝试了 css_selector。选择标签被选中,我可以得到选择标签的输出。这是我的代码以便更好地理解: 代码 1:-

path = r'D:\chromedriver_win32\chromedriver.exe'
browser = webdriver.Chrome(executable_path = path)
website = browser.get("https://publicplansdata.org/resources/download-avs-cafrs/")
el = browser.find_element_by_xpath('//*[@id="ppd-download-state"]/select')
for option in el.find_elements_by_tag_name('option'):
  if option.text != None:
    option.click()
    break

块引用

代码 2:-

select_element = Select(browser.find_element_by_xpath('//*[@id="ppd-download-state"]/select'))
# this will print out strings available for selection on select_element, used in visible text below
print(o.value for o in select_element.options)
select_element.select_by_value('AK')

两个代码都给出相同的错误我如何从网站的下拉列表中选择值

与问题相同: Python selenium select element from drop down. Element Not Visible Exception 但错误是不同的。尝试了cmets中的方法

【问题讨论】:

  • 试试这个el = browser.find_element_by_xpath("//div[@id='ppd-report-downloads']/div[@id='ppd-download-state']/select")
  • 您是否尝试过首先单击包含文本状态右侧向下箭头的任何元素?我猜这会使您的选择元素可见。刚刚检查了您的网站,您可以先点击"//span[text()='State']" 以使您的选择下拉菜单可见。
  • 啊!该页面可能使用引导程序或类似的东西。选择有 style=display:none。显示状态的下拉菜单位于 UL 元素中:ul.selectBox-dropdown-menu.selectBox-options。

标签: python-3.x selenium


【解决方案1】:

州、计划和年份:

browser.find_element_by_xpath("//span[text()='State']").click()    
browser.find_element_by_xpath("//a[text()='West Virginia']").click()

time.sleep(2) # wait for Plan list to be populated

browser.find_element_by_xpath("//span[text()='Plan']").click()    
browser.find_element_by_xpath("//a[text()='West Virginia PERS']").click()

time.sleep(2) # wait for Year list to be populated

browser.find_element_by_xpath("//span[text()='Year']").click()    
browser.find_element_by_xpath("//a[text()='2007']").click()

别忘了import time

【讨论】:

  • 非常感谢贾斯汀。代码确实有效:)。我想问,你在哪里找到这个xpath?它是显示在检查中的某处还是您刚刚创建了跨度选择的路径?我仍然需要选择其他两个选项(计划和年份),所以它会有所帮助。
  • 在检查中显示。我有使用引导程序抓取页面的经验,所以当我看到选择被隐藏时,我去寻找引导程序创建和显示的 UL。
  • 还有一个疑问,在我设置任何一个状态的值后,在状态部分,我想选择我们选择状态后加载的每个计划。我如何访问计划以及选择计划后如何选择特定年份。 @贾斯汀。到目前为止非常感谢您
  • @HimaliShelat,添加了计划和年份的点击次数
  • 非常感谢,它有帮助。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 1970-01-01
相关资源
最近更新 更多