Python 与浏览器不同的无头Chrome页面源

Python 与浏览器不同的无头Chrome页面源,python,selenium,selenium-chromedriver,Python,Selenium,Selenium Chromedriver,我正在尝试在python中使用selenium和chromedriver挖掘一个网站。我正在寻找的元素是渲染的,当我使用没有headless选项的chrome驱动程序时,我可以与它交互。当我使用headless选项时,元素不再存在。有人能为我指出解决此问题的正确方向吗?代码如下: from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options=Options(

我正在尝试在python中使用selenium和chromedriver挖掘一个网站。我正在寻找的元素是渲染的,当我使用没有headless选项的chrome驱动程序时,我可以与它交互。当我使用headless选项时,元素不再存在。有人能为我指出解决此问题的正确方向吗?代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options=Options()
chrome_options.add_argument('--mute-audio')
chrome_options.add_argument('--headless')

driver=webdriver.Chrome(executable_path=chromedriver_path,options=chrome_options)

driver.get("https://www.youtube.com/user/PaymoneyWubby/about")
el = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH,"/html/body/ytd-app/div/ytd-page-manager/ytd-browse/div[3]/ytd-c4-tabbed-header-renderer/app-header-layout/div/app-header/div[2]/div[2]/div/div[1]/div/div[1]/yt-formatted-string"))
)

我对你的问题没有答案(我怀疑Youtube知道浏览器处于无头模式,并且不喜欢网络爬虫,尤其是使用自己公司浏览器的爬虫——看看使用Firefox是否会得到不同的结果),但我有一个建议可以帮你清理xpath:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options=Options()
chrome_options.add_argument('--mute-audio')
chrome_options.add_argument('--headless')

driver=webdriver.Chrome(executable_path=chromedriver_path,options=chrome_options)

driver.get("https://www.youtube.com/user/PaymoneyWubby/about")
el = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH,"//yt-formatted-string[@id='subscriber-count']"))
)

通过设置用户代理选项修复了此问题

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument("--user-agent=Mozilla...")