当前位置: 首页 > 知识库问答 >
问题:

Selenium错误消息“Selenium.webdriver没有属性执行脚本”

马坚
2023-03-14

我正在用硒刮一个无限滚动的页面。

我正在尝试使用以下代码:

import time
import pandas as np
import numpy as np

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://twitter.com/search?f=tweets&q=csubwaystats%20since%3A2018-05-28%20until%3A2018-08-28'

browser.get(url)
time.sleep(1)

SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = webdriver.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    webdriver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = webdriver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

我从多个来源获得此代码,最近的一个来源是:

如何在python中使用SeleniumWebDriver滚动网页?

我将其更新为包含“webdriver”而不是“driver”,因为我将selenium作为webdriver导入。否则就不行了。

我的问题是,当我运行代码时,我得到:

AttributeError: module 'selenium.webdriver' has no attribute 'execute_script'

我真的不明白这意味着什么以及如何修复它?我找不到这方面的信息。

我是python新手,所以我可能遗漏了一些显而易见的东西,但任何建议都将不胜感激。

共有3个答案

沈嘉瑞
2023-03-14
AttributeError: module 'selenium.webdriver' has no attribute 'execute_script'

您会得到这个错误,因为execute_script不是一个类属性,您不能直接使用它。因为它是一个实例属性,你应该创建一个类的实例。请点击这里了解更多关于课程的信息。

这将正常工作,因为execute_script作为实例属性运行。

last_height = browser.execute_script("return document.body.scrollHeight")

您的最终代码如下所示:

import time
import pandas as np
import numpy as np

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

browser = webdriver.Chrome()
url = 'https://twitter.com/search?f=tweets&q=csubwaystats%20since%3A2018-05-28%20until%3A2018-08-28'

browser.get(url)
time.sleep(1)

SCROLL_PAUSE_TIME = 0.5

# Get scroll height
last_height = browser.execute_script("return document.body.scrollHeight")

while True:
    # Scroll down to bottom
    webdriver.execute_script("window.scrollTo(0,document.body.scrollHeight);")

    # Wait to load page
    time.sleep(SCROLL_PAUSE_TIME)

    # Calculate new scroll height and compare with last scroll height
    new_height = webdriver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height
东方镜
2023-03-14

要使其正常工作,您必须创建webdriver的实例,例如:

from selenium import webdriver

driver = webdriver.Chrome() # webdriver.Ie(), webdriver.Firefox()...
last_height = driver.execute_script("return document.body.scrollHeight")

你可以从这里下载Chromedriver

您还需要将Chromedriver的路径添加到环境变量path中,或者将下载的文件放入与Python可执行文件相同的文件夹中。。。

杜志
2023-03-14

webdriver是模块的名称,而不是您的实例。事实上,您已将创建的实例分配给名称browser,其中有一行:browser=webdriver。Chrome()

因此,不要调用webdriver。执行_script()(这将为您提供一个AttributeError),您必须使用您的实例调用它,如下所示:浏览器。执行脚本()

 类似资料: