Python 硒无头与无头

Python 硒无头与无头,python,selenium,selenium-webdriver,selenium-chromedriver,headless-browser,Python,Selenium,Selenium Webdriver,Selenium Chromedriver,Headless Browser,我目前正在使用python中的Selenium进行一个webscraping项目 在非headless模式下从web驱动程序运行时,我的代码可以正常工作。但是,在无头模式下运行时,情况并非如此。例如,如果我试图从网站中提取文本,非headless模式返回文本,而headless模式不返回任何文本。(我在下面提供了一些代码供参考) 首先,我用以下代码构造webdriver(opt.headless设置为True或False,以便在headless和non-headless之间切换) 然后,我使用f

我目前正在使用python中的Selenium进行一个webscraping项目

在非headless模式下从web驱动程序运行时,我的代码可以正常工作。但是,在无头模式下运行时,情况并非如此。例如,如果我试图从网站中提取文本,非headless模式返回文本,而headless模式不返回任何文本。(我在下面提供了一些代码供参考)

首先,我用以下代码构造webdriver(opt.headless设置为True或False,以便在headless和non-headless之间切换)

然后,我使用find_elements\u by_xpath函数从网站中提取文本数据。下面提供了一个示例代码:

driver = getHeadlessDriver()
feedbacks = driver.find_elements_by_xpath(
    "//div[contains(@class, 'LiveFeedbackSectionViewController__LiveFeedbackStatusItem-sc-1ahetk9-4 cUJPkM')]")
for feedback in feedbacks:
     print(feedback.text)
我在谷歌上搜索了一下,想找到无头模式不起作用的原因,但我还是不确定。根据我的理解,无头模式“作用相同”,但没有图形用户界面

我的代码的实现会有问题吗?或者无头模式除了没有图形用户界面之外还有其他区别吗


谢谢。

我想我找到了这个问题的可能答案

在Selenium中使用无头浏览器时,它的运行速度比使用无头浏览器时快。在这种情况下,python程序可能会在DOM完全加载之前执行

换句话说,尝试访问web元素的函数可能返回
None
,因为在调用函数之前没有加载元素

为了解决这个问题,我们可以隐式地利用Selenium中包含的
等待
函数。比如说,

driver = webdriver.Chrome()
driver.implicitly_wait(3) #units in seconds
将告诉驱动程序以秒为单位等待指定的时间量传递给
隐式\u wait
函数,以便加载DOM


我已经用这种方法在headless模式下测试了我的函数,现在它似乎正在工作。但如果有其他解决方案,请随时发表评论

getHeadlessDriver
后面缺少括号。将其更改为
getHeadlessDriver()
,它应该可以工作:d缺少的括号是打字错误,抱歉。在GUI旁边,headless和non-headless的功能相同吗?有些厚颜无耻的网站不会在headless模式下加载整个页面。为了调试网站在无标题模式下的不同之处,我建议您使用
驱动程序。保存屏幕截图()
,然后查看图像以查看页面是否正确加载。
driver = webdriver.Chrome()
driver.implicitly_wait(3) #units in seconds