Python - selenium webdriver 卡在 .get() 循环中

标签 python selenium-webdriver

我有一个 Python 代码片段,它使用 Selenium Webdriver 循环遍历一些历史棒球赔率。代码的第一部分旨在从时间表(由大约 57 个需要循环的页面组成)中获取所有单独的游戏 URL,并将它们存储在一个列表中。

我第一次测试它时它工作得很好 - 现在,无论出于何种原因,driver.get() 函数似乎无法正常工作。发生的情况是 webdriver 在 pageRange 循环(第 2 页)中启动第一个 .get() 方法,但在那之后,在循环的下一次迭代中它被卡住并且不会导航到第 3 页。没有错误消息或崩溃。

使用 print() 进行的一些手动错误检查表明代码的所有其他区域都运行良好。这个问题的潜在原因是什么?

编辑 1:如上所述,代码实际上在第一次 .get() 调用之后立即卡住,而不是在第二次调用之前卡住。我还注意到 .get() 函数在稍后循环通过游戏 URL 时在代码中运行良好。由于某种原因,它特别是“http://www.oddsportal.com/baseball/usa/mlb-2017/results/#/page/2/ ”、“” http://www.oddsportal.com/baseball/usa/mlb-2017/results/#/page/3/ ",等等,它卡住了。

season = str(2017)

URL = "http://www.oddsportal.com/baseball/usa/mlb-" + season + "/results/#/"
chrome_path = r"C:\Users\dansl110\Dropbox\Betting Project/chromedriver.exe"

OddsList = pd.DataFrame(columns=["Date", "HomeTeam", "AwayTeam", "HomeOdds", 
"AwayOdds", "Accuracy"])

GameURLs = []
StartURL = 2

#Gets GameURLs and EndPage from Page 1
driver = webdriver.Chrome(chrome_path)
driver.get(URL)
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    link = elem.get_attribute("href")
    if "/results/#/page/" in link:
        EndURL = int(''.join(c for c in link if c in digits))
    elif "/mlb" in link and len(str(link)) > 58 and "results" not in link:
        GameURLs.append(link)

PageRange = range(StartURL, EndURL - 5)

#Gets remaining GameURLs
for page in PageRange:
    oldURL = URL
    URL = "http://www.oddsportal.com/baseball/usa/mlb-" + season + 
    "/results/#/page/" + str(page) + "/"
    #This .get() works only during the first iteration of the range loop
    driver.get(URL)
    time.sleep(3)
    elems = driver.find_elements_by_xpath("//a[@href]")
    for elem in elems:
        link = elem.get_attribute("href")
        if "/nhl" in link and len(str(link)) > 65 and "results" not in link:
            GameURLs.append(link)

最佳答案

从今天开始,我遇到了同样的问题。我发现我运行 64.- 版 Chrome 的任何机器都存在间歇性挂起问题,但运行 63.- 的机器却没有。转到 chrome://settings/help 并检查哪个版本: enter image description here

如果您正在运行该版本。尝试在此处下载 Chromedriver 版本 (2.35):https://sites.google.com/a/chromium.org/chromedriver/downloads

我试过了,它似乎对悬挂有一点帮助,但它似乎仍在发生。

唯一修复它的方法是返回为 Chrome 构建 63.-

希望对你有帮助。

编辑:

我找到了 this会有所帮助的线程!在创建驱动程序之前将其添加到您的脚本中:

from selenium import webdriver

ChromeOptions = webdriver.ChromeOptions()
ChromeOptions.add_argument('--disable-browser-side-navigation')
driver = webdriver.Chrome('your/path/to/chromedriver.exe', chrome_options=ChromeOptions)

一旦 Chrome 版本 65.- 发布,它就会得到修复。同时,如果您仍在使用 64.-

,请使用上面的方法

关于Python - selenium webdriver 卡在 .get() 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48666620/

相关文章:

java - 如何单击 span 类中的动态元素

python - 使用selenium和python通过CssSelector的 "begins with"方法定位元素

java - org.openqa.selenium.support.ui.UnexpectedTagNameException : Element should have been "select" but was "title"

java - 无法使用 xpath/css 遍历选择标题/菜单下拉项

python - Lambda 函数和 0

python - 如何从随意的 .dat 文件创建 Pandas df?

python - 安排 Python 脚本在没有 cron 的情况下每周日运行

python - 我应该如何为 Django Channels 2.0 配置 Redis?

python - Django 数据保存和呈现

java - Selenium 2 hub 启动但在尝试访问控制台时抛出 404