Python 无头铬无法检测元素(硒)
当在非无头模式下完成时,它工作良好,但在无头模式下未检测到任何元素 代码 网址: 我想输入邮件地址和密码,然后在无头模式下点击按钮Python 无头铬无法检测元素(硒),python,selenium,google-chrome,selenium-webdriver,google-chrome-headless,Python,Selenium,Google Chrome,Selenium Webdriver,Google Chrome Headless,当在非无头模式下完成时,它工作良好,但在无头模式下未检测到任何元素 代码 网址: 我想输入邮件地址和密码,然后在无头模式下点击按钮 import time from selenium import webdriver from selenium.webdriver.chrome.options import Options import chromedriver_binary options = Options() options.add_argument("--headless") opti
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()
错误语句如下所示
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)
为什么它在无头模式下不工作而在无头模式下工作?帮帮我。尝试等待元素,而不仅仅是使用硬编码睡眠:
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调试
也有可能在无头模式下,您的“屏幕大小”配置不正确,导致对屏幕的响应,从而导致元素发生变化。尝试等待元素,而不仅仅是使用硬编码睡眠:
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调试
也有可能在无标题模式下,您的“屏幕大小”配置不正确,导致对屏幕的响应,从而导致元素更改。您正在访问的页面似乎不允许无标题浏览器模式。尝试打印HTML页面,看看它是否返回所有元素。我尝试添加以下语句,看起来应用程序返回了禁止页面 打印(驱动程序。通过xpath('//*')查找元素。获取属性(“innerHTML”)) 我是从你分享的网址上得到的 禁止的
您可以参考以进行调试您正在访问的页面似乎不允许无头浏览器模式。尝试打印HTML页面,看看它是否返回所有元素。我尝试添加以下语句,看起来应用程序返回了禁止页面 打印(驱动程序。通过xpath('//*')查找元素。获取属性(“innerHTML”)) 我是从你分享的网址上得到的 禁止的
您可以参考以进行调试我对您的代码进行了一些修改,并在我的末尾执行,下面是执行结果:
- 代码块:
from selenium import webdriver options = webdriver.ChromeOptions() options.headless = True options.add_argument('window-size=1400,600') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get('https://moneyforward.com/users/sign_in') print(driver.page_source) driver.save_screenshot('./save_screenshot_method.png') #Capture the screen driver.quit()
- 控制台输出:
<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">Forbidden</pre></body></html>
禁止
- 浏览器快照:
分析 似乎正在检测到驱动,并显示消息禁止
解决方案 作为一个解决方案,您可以采取一些策略,这样ChromeDriver驱动的Chrome浏览上下文就不会被检测到,您可以在以下内容中找到一些详细的讨论:
- 代码块:
from selenium import webdriver options = webdriver.ChromeOptions() options.headless = True options.add_argument('window-size=1400,600') options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get('https://moneyforward.com/users/sign_in') print(driver.page_source) driver.save_screenshot('./save_screenshot_method.png') #Capture the screen driver.quit()
- 控制台输出:
<html><head></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">Forbidden</pre></body></html>
禁止
- 浏览器快照:
分析 似乎正在检测到驱动,并显示消息禁止
解决方案 作为一个解决方案,您可以采取一些策略,这样ChromeDriver驱动的Chrome浏览上下文就不会被检测到,您可以在以下内容中找到一些详细的讨论: