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



我正在尝试使用chromedriver在python中使用Selenium挖掘一个网站。我正在寻找的元素已呈现,当我使用没有无头选项的 chrome 驱动程序时,我可以与它进行交互。当我使用无头选项时,该元素不再存在。有人可以指出我解决此问题的正确方向吗?代码如下:

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...")

最新更新