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

Posted

技术标签:

【中文标题】Selenium 错误消息“selenium.webdriver 没有属性执行脚本”【英文标题】:Selenium error message "selenium.webdriver has no attribute execute script" 【发布时间】:2019-02-04 15:45:44 【问题描述】:

我正在使用 selenium 来抓取无限滚动页面。

我正在尝试使用此代码:

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

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

How can I scroll a web page using selenium webdriver in python?

我将它更新为包含“webdriver”而不是“driver”,因为我将 selenium 作为 webdriver 导入。否则它不起作用。

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

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

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

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

【问题讨论】:

请用您使用的确切代码更新问题 就这么做了。谢谢! 【参考方案1】:
AttributeError: module 'selenium.webdriver' has no attribute 'execute_script'

你得到这个错误是因为'execute_script'不是一个类属性,你不能直接使用它。因为它是一个 instance 属性,你应该创建一个类的实例。请查看here 了解更多关于的信息。

现在可以正常工作了,因为“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

【讨论】:

"Do not import selenium as webdriver, import webdriver from selenium"...考虑到异常日志OP已经导入webdriverfrom@ 987654326@。 “你需要 webdriver 类”...webdriver 不是一个,而是定义了WebDriver 类的模块。 “selenium 是一个包含 python 类的 python 程序”...没有 cmets :) 对不起,我应该澄清一下。我确实使用了'from selenium import webdriver'(当然没有引号)我也确实创建了一个webdriver的实例,但我使用的是chrome。我的路上也有它。 @Andersson 请原谅我对此的无知,我是一名学生,我正在努力给出答案。不过,我不应该提出我不知道的事情。 @agra94 好吧,很抱歉我没有正确阅读您的问题。很明显,您已经可以使用 Chrome 实现自动化,这是我的错。 @CoreyGoldberg 我已经修复了缩进。【参考方案2】:

webdriver 是模块的名称,而不是您的实例。实际上,您将创建的实例分配给名称 browser 使用以下行:browser = webdriver.Chrome()

所以不要调用webdriver.execute_script()(这会给你一个AttributeError),你必须使用你的实例调用它,像这样:browser.execute_script()

【讨论】:

【参考方案3】:

要使其工作,您必须创建一个 webdriver 实例,例如:

from selenium import webdriver

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

您可以从here下载Chromedriver

您还需要add path to Chromedriver to your environment variable PATH 或将下载的文件放入与您的 Python 可执行文件相同的文件夹中...

【讨论】:

啊,那是我的错。我没有包括我做这个的代码。我有 from selenium import webdriver driver = webdriver.Chrome('location of chromedriver') ...然后我继续上面的内容 抱歉,我不确定如何正确格式化 cmets @agra94 ,你不应该只定义driver,而是在下面的行中使用它(注意我使用了driver.execute_script(),而不是webdriver.execute_script()

以上是关于Selenium 错误消息“selenium.webdriver 没有属性执行脚本”的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriverException 中的空错误消息

Selenium:我正在使用 Firefox 版本 46.01 并在 eclipse 中测试显示错误消息

selenium.common.exceptions.WebDriverException:消息:未知错误:调用函数结果缺少“值”

selenium.common.exceptions.WebDriverException:消息:“WebScraping”可执行文件可能有错误的权限

需要使用 selenium Java 验证带有多个随机字符串的错误消息

使用 selenium Web 驱动程序验证错误消息