首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无头铬不能检测元素(硒)

无头铬不能检测元素(硒)
EN

Stack Overflow用户
提问于 2020-03-10 17:37:18
回答 3查看 3.6K关注 0票数 1

它在非无头模式下工作良好,但在无头模式下没有检测到任何元素。

代码

网址:在……里面

我想键入mail_address和密码,并点击按钮在无头模式。

代码语言:javascript
复制
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary

options = Options()
options.add_argument("--headless")
options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=options)

driver.get("https://moneyforward.com/users/sign_in")

time.sleep(5)


# type into mail_address
driver.find_element_by_id('sign_in_session_service_email').send_keys({mail_address}])

# type into passowrd
driver.find_element_by_id('sign_in_session_service_password').send_keys({password})

# click login button
driver.find_element_by_id("login-btn-sumit").click()

错误语句如下所示。

代码语言:javascript
复制
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="sign_in_session_service_email"]"}
  (Session info: headless chrome=80.0.3987.132)

当它在非无头模式下工作时,为什么它不工作在无头模式?帮帮我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-10 21:07:16

我接受了您的代码,修改了一些代码,并在我的末尾执行了它,下面是执行结果:

  • 代码块: 从selenium导入webdriver.Chrome= webdriver.ChromeOptions() options.headless = True options.add_argument('window-size=1400,600') driver.save_screenshot('./save_screenshot_method.png')“启用-自动”)驱动程序= webdriver.Chrome(options=options,executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get('在‘’) print(driver.page_source) driver.save_screenshot(‘./save_screenshot_method.png’)#捕捉屏幕driver.quit()
  • 控制台输出:
  • 浏览器快照:

分析

看来ChromeDriver驱动的谷歌铬无头被检测到了,而访问被拒绝则显示了禁忌的消息。

解决方案

作为一种解决方案,您可以采用一些策略,这样就不会检测到ChromeDriver驱动的Chrome浏览上下文,并且您可以在以下内容中找到一些详细的讨论:

票数 0
EN

Stack Overflow用户

发布于 2020-03-10 18:24:40

尝试等待元素,而不是仅仅使用硬编码睡眠:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC    

WebDriverWait(driver, 20).until(
                EC.presence_of_element_located((By.ID, "sign_in_session_service_email"))

在尝试将睡眠提升到更高的等待之前,jsut要进行调试。

也有可能在无头模式下,您的“屏幕大小”配置不正确,并导致对屏幕的响应反应,导致元素发生更改。

票数 0
EN

Stack Overflow用户

发布于 2020-03-10 18:35:45

您正在访问的页面似乎不允许使用无头浏览器模式。尝试打印HTML页面,看看它是否返回所有元素。我尝试添加以下语句,看起来应用程序返回了禁止的页面。

print(driver.find_element_by_xpath('//*').get_attribute("innerHTML"))

我是从你分享的网址上得到的。

已禁用

您可以参考铬无头选择进行调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60623059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档