Сообщение об ошибке Selenium "selenium.webdriver не имеет атрибута сценария выполнения» - PullRequest
0 голосов
/ 29 августа 2018

Я использую селен для очистки бесконечной страницы прокрутки.

Я пытаюсь использовать этот код:

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

Я получил этот код из нескольких источников, самый последний из которых:

Как прокрутить веб-страницу с помощью веб-драйвера selenium в python?

Я обновил его, добавив вместо драйвера "webdriver", потому что я импортирую селен в качестве webdriver. Это не работает иначе.

Моя проблема в том, что когда я запускаю код, я получаю:

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

Я не очень понимаю, что это значит и как это исправить? Я не смог найти информацию об этом.

Я новичок в python, и, возможно, мне не хватает чего-то очевидного, но любой совет был бы оценен.

Ответы [ 3 ]

0 голосов
/ 29 августа 2018
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
0 голосов
/ 30 августа 2018

webdriver - это имя модуля, а не его экземпляр. Фактически вы присвоили созданному экземпляру имя browser с этой строкой: browser = webdriver.Chrome()

поэтому вместо вызова webdriver.execute_script() (который даст вам AttributeError), вы должны вызвать его, используя свой экземпляр, например: browser.execute_script().

0 голосов
/ 29 августа 2018

Чтобы это работало, вам нужно создать экземпляр webdriver, например ::100100

from selenium import webdriver

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

Вы можете скачать Chromedriver с здесь

Вам также необходимо добавить путь к Chromedriver в переменную среды PATH или просто поместить загруженный файл в ту же папку, что и исполняемый файл Python ...

...