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

时间:2018-08-29 19:03:55

标签: python selenium selenium-webdriver driver

我正在使用硒刮擦无限滚动页面。

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

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”,因为我将硒导入为webdriver。否则它将无法正常工作。

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

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

我不太了解这意味着什么以及如何解决?我还没有找到有关此信息。

我是python的新手,所以可能缺少明显的东西,但是任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

因此,您不必使用webdriver.execute_script()(它将为您提供AttributeError),而必须使用您的实例来调用它,例如:browser.execute_script()

答案 1 :(得分:1)

要使其正常工作,您必须创建一个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可执行文件相同的文件夹中...

答案 2 :(得分:1)

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

由于“ execute_script”不是 class属性,因此出现此错误,只是不能直接使用它。由于它是 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