MacOS上的Selenium和Chrome webdriver需要点击下拉元素。但总是有一个无法找到的错误。将此HTML代码放在它所在的页面上:
<select id="periodoExtrato" name="periodoExtrato" class="EXTtexto" onchange="enviarExtrato(document.formperiodo.periodoExtrato[document.formperiodo.periodoExtrato.selectedIndex].value);">
<!--<option value="01" >Último dia</option>-->
<option value="03" selected="true">Últimos 3 dias</option>
<option value="05">Últimos 5 dias</option>
<option value="07">Últimos 7 dias</option>
<option value="15">Últimos 15 dias</option>
<option value="30">Últimos 30 dias</option>
<option value="X">Data específica (até 60 dias)</option>
<option value="D">Mês completo (desde 2002)</option>
</select>
我需要选择Últimos15dias,所以我有这个代码:
self.driver.find_element_by_xpath('//[@id="periodoExtrato"]/option[4]').click()
但有错误:
Traceback (most recent call last):
File "olxscrape.py", line 120, in <module>
main()
File "olxscrape.py", line 117, in main
b = Bot()
File "olxscrape.py", line 12, in __init__
self.navigate()
File "olxscrape.py", line 106, in navigate
self.driver.find_element_by_xpath('//*[@id="periodoExtrato"]/option[4]').click()
File "/Users/Lutchenko/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 293, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "/Users/Lutchenko/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 752, in find_element
'value': value})['value']
File "/Users/Lutchenko/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "/Users/Lutchenko/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 192, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="periodoExtrato"]/option[4]"}
(Session info: chrome=55.0.2883.95)
(Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Mac OS X 10.12.2 x86_64)
答案 0 :(得分:0)
我建议不要在这里使用xpath。试试这样的事情:
select = Select(self.driver.find_element_by_id('periodoExtrato'))
option_indexes = range(1, len(select.options))
for index in option_indexes:
select.select_by_index(index)
......
答案 1 :(得分:0)
问题是元素在</head>
中<frameset>
之后,所以selenium无法找到它。添加此字符串后问题解决了。
browser.switch_to_frame('name')
之后
self.driver.find_element_by_xpath('//[@id="periodoExtrato"]/option[4]').click()