我有一个 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
并检查哪个版本:
如果您正在运行该版本。尝试在此处下载 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/