Python selenium selenium.common.exceptions.StaleElementReferenceException:

时间:2017-05-19 10:16:22

标签: python selenium

当我试图从oddsportal.com找到体育博彩赔率时,我有这个奇怪的错误。看起来selenium对象不像普通列表那样工作,我不能只是遍历每个url。测试网址应该有效http://www.oddsportal.com/soccer/england/premier-league/(脚本不是为家庭抽奖赔率而写的。)

那我在这里做错了什么? 我的剧本:

from selenium import webdriver
from selenium.common.exceptions import NoSuchAttributeException,NoSuchElementException
from selenium.webdriver.common.keys import Keys


class Odds():
    def odds(self,driver,url):

        kertoimet = ['','']
        driver.get(url)
        odds = driver.find_elements_by_xpath("""//*[@id="odds-data table"]/div/table/tbody/tr""")
        for item in odds:
            data = item.text.replace(' ','').split('\n')
            if data[0] == 'Pinnacle':
                kertoimet = [data[1],data[2]]
        return kertoimet

    def odds_finder(self,data,driver):

        for item in data:
            if item.get_attribute('href') != '':
                print(Odds().odds(driver,str(item.get_attribute('href'))))

    def url_finder2(self,URL):

        driver = webdriver.Chrome("/usr/local/bin/chromedriver 2")

        driver.get(URL) #http://www.oddsportal.com/soccer/england/premier-league/
        data = driver.find_elements_by_xpath("""//*[@id="tournamentTable"]/tbody/tr/td/a""")

        Odds().odds_finder(list(data),driver)

Odds().url_finder2(URL)

错误:

Traceback (most recent call last):
File "odds.py", line 79, in <module>
Odds().url_finder2(open('oddsportal_odds.csv'))
File "odds.py", line 61, in url_finder2
Odds().odds_finder(list(data),driver)
File "odds.py", line 49, in odds_finder
if item.get_attribute('href') != '':
File "/Library/Python/2.7/site-
packages/selenium/webdriver/remote/webelement.py", line 141, in 
get_attribute
resp = self._execute(Command.GET_ELEMENT_ATTRIBUTE, {'name': name})
File "/Library/Python/2.7/site-
packages/selenium/webdriver/remote/webelement.py", line 494, in 
_execute
return self._parent.execute(command, params)
File "/Library/Python/2.7/site-
packages/selenium/webdriver/remote/webdriver.py", line 236, in execute
self.error_handler.check_response(response)
File "/Library/Python/2.7/site-
packages/selenium/webdriver/remote/errorhandler.py", line 192, in 
check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: 
stale element reference: element is not attached to the page document
(Session info: chrome=58.0.3029.110)
(Driver info: chromedriver=2.29.461585 
(0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.3 
x86_64)

1 个答案:

答案 0 :(得分:0)

您只需再次拨打data,因为状态会发生变化。

尝试修改此2功能。

def odds_finder(self,driver):
        for item in driver.find_elements_by_xpath("//*[@id="tournamentTable"]/tbody/tr/td/a"):
            time.sleep(5)
            if item.get_attribute('href') != '':
                print(Odds().odds(driver, str(item.get_attribute('href'))))

def url_finder2(self, URL):
    driver = webdriver.Chrome("/usr/local/bin/chromedriver 2")
    driver.get(URL)  # http://www.oddsportal.com/soccer/england/premier-league/
    Odds().odds_finder(driver)