【发布时间】:2018-04-26 19:30:56
【问题描述】:
我正在尝试使用以下代码使用 Python Selenium 登录网站:
import time
from contextlib import contextmanager
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
@contextmanager
def getBrowser(*options):
chrome_options = Options()
if options: [chrome_options.add_argument(option) for option in options]
browser = webdriver.Chrome(chrome_options=chrome_options)
try:
yield browser
finally:
browser.quit()
with getBrowser() as browser:
browser.get('https://www.vinted.com/members/notifications')
time.sleep(20)
browser.find_element_by_xpath('//*[@id="content"]/div/div[2]/div/div/div[6]/div[3]/div[3]/a/span').click()
它运行良好,但是当我将--headless 选项添加到浏览器时,它会引发NoSuchElementException。
错误提升代码:
with getBrowser('--headless') as browser:
browser.get('https://www.vinted.com/members/notifications')
time.sleep(20)
browser.find_element_by_xpath('//*[@id="content"]/div/div[2]/div/div/div[6]/div[3]/div[3]/a/span').click()
追溯:
Traceback (most recent call last):
File "<ipython-input-4-fe0834deb137>", line 1, in <module>
runfile('C:/Users/Alec/vinted test case.py', wdir='C:/Users/Alec')
File "C:\Users\Alec\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)
File "C:\Users\Alec\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Alec/vinted test case.py", line 27, in <module>
browser.find_element_by_xpath('//*[@id="content"]/div/div[2]/div/div/div[6]/div[3]/div[3]/a/span').click()
File "C:\Users\Alec\selenium\webdriver\remote\webdriver.py", line 354, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "C:\Users\Alec\selenium\webdriver\remote\webdriver.py", line 832, in find_element
'value': value})['value']
File "C:\Users\Alec\selenium\webdriver\remote\webdriver.py", line 297, in execute
self.error_handler.check_response(response)
File "C:\Users\Alec\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
raise exception_class(message, screen, stacktrace)
NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="content"]/div/div[2]/div/div/div[6]/div[3]/div[3]/a/span"}
(Session info: headless chrome=65.0.3325.181)
(Driver info: chromedriver=2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91),platform=Windows NT 10.0.16299 x86_64)
此错误仅在浏览器无头时发生。是什么导致了这种行为?可以让它在无头模式下工作吗?
目标 HTML:
<div class="u-flex-grow">
<a class="c-button--inverse c-button--normal c-button--amplified c-button " href="/member/general/login?ref_url=%2Fmembers%2Fnotifications"><span class="c-button__content">Log In</span></a>
</div>
【问题讨论】:
-
试试
browser.find_element_by_link_text("Log In").click() -
同样的问题。在无头模式下不起作用,但在其他情况下也能正常工作
-
你能用相关的HTML更新问题吗?
-
@DebanjanB 我已经包含了我试图与之交互的元素的 HTML。当然,我提供的元素不会有相同的 xpath
标签: python selenium-webdriver selenium-chromedriver