Python Selenium:浏览器无头时无法通过xpath查找元素

床单

我正在尝试使用以下代码使用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>
小矮人

我曾经遇到过这样的工具版本的麻烦。我通过确保安装了最新版本的Chrome和网络驱动程序来解决此问题。也许是类似的问题?

但除此之外,您的选择器还取决于很多元素。因此,想象在无头模式下html看起来有点不同可能会导致您的问题。

我会尝试获得一个不太严格的选择器,如下所示: //a[starts-with(@href,'/member/general/login?')]

如果这样不起作用,请尝试从无头模式中将html转储到文件中。只是为了看看无头浏览器会看到什么,并尝试使用它构建一个精美的选择器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python Selenium保持浏览器打开

使用Selenium登录到stackoverflow可以,但是不能使用scrapy python。我如何通过无头浏览登录?

在Selenium中将PhantomJS用于无头浏览器-Python

Python Selenium使用OR运算符通过xpath查找元素

在Python Selenium中通过xPath查找表元素

Python Selenium无法通过xpath查找表元素

更改浏览器后,Python Selenium保留元素

通过无头Chrome的Python禁用Selenium代理

如何通过Selenium和Python根据html查找元素的Xpath

无法使用Appium / Python通过XPATH查找元素

Python,Selenium:当ul列表过长时,无法通过xpath查找元素

Python Selenium无法使用绝对xpath div查找元素

在Linux上使用无头Chrome浏览器访问“拒绝”页面,而带头Chrome浏览器在Windows上使用Selenium通过Python在Windows上运行

通过LXML通过XPATH查找元素-Python

在Python中,如何通过保存的浏览器会话使Selenium正常运行?

使用Selenium Python客户端在不同的浏览器中处理无头模式

Python Selenium:通过XPath查找元素,&nbsp; 问题

Selenium-Python Safari WebDriver-未通过xpath查找元素

Selenium:无法通过XPATH Python查找元素

使用Selenium和Python无法通过xpath定位元素

如何使用无头浏览器运行Selenium Python

无法在Python Selenium中重新打开浏览器

Python / Selenium-通过xpath查找元素-那里的元素,但未找到

无法使用python中的无头浏览器提交表单/登录到Nike.com

Python 3 + Selenium:如何通过xpath查找此元素?

如何让 chromedriver 记住我使用 python selenium 通过浏览器启动应用程序的设置?

使用 selenium python 的浏览器自动化:现在无法找到要加入的元素 google meet

Python Selenium 无法通过类名和 xpath 找到元素

Python Selenium - 通过相对 xpath 获取元素