当我在Python中使用Chromedriver来抓取某个网站时,如果我通过Colab运行脚本,我只会得到错误的结果。例如,如果我使用Spyder,一切似乎都很好。
在我看来,硒仍然在寻找正确的元素,但它提取奇怪的数字,我在网站上找不到。
网站与结果:网站编号(https://i.stack.imgur.com/bEKbh.png)
Colab返回:结果来自Colab(https://i.stack.imgur.com/1EbOM.png)
网站:"https://www.oddsportal.com/soccer/croatia/hnl/hnk-gorica-varazdin-Kr4sLgwt/1 x2; 2,
我用这个函数来测试:
def fi(a):
try:
driver.find_element("xpath", a).text
except:
return False
这个用来获取文本:
def ffi(a):
if fi(a) != False :
return driver.find_element("xpath", a).text
完整的代码
driver.get("https://www.oddsportal.com/soccer/croatia/hnl/hnk-gorica-varazdin-Kr4sLgwt/#1X2;2")
for j in range(1,15):
print(j)
book= ffi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[1]'.format(j))
if fi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[2]//preceding-sibling::a'.format(j))==False:
Odd_1=ffi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[2]'.format(j))
else:
Odd_1=fi('((//*[starts-with(@class,"flex text-xs max")])[{}]//a)[5]'.format(j))
if fi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[3]//preceding-sibling::a'.format(j))==False:
Odd_X=ffi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[3]'.format(j))
else:
Odd_X=ffi('((//*[starts-with(@class,"flex text-xs max")])[{}]//a)[6]'.format(j))
if fi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[4]//preceding-sibling::a'.format(j))==False:
Odd_2=ffi('((//*[starts-with(@class,"flex text-xs max")])[{}]//p)[4]'.format(j))
else:
Odd_2=ffi('((//*[starts-with(@class,"flex text-xs max")])[{}]//a)[7]'.format(j))
ab= (ffi('//div[contains(@class,"flex items-center w-full h-auto")]//p'))
bc=(ffi('(//div[contains(@class,"flex px")]//child::div)[3]'))
print(book, Odd_1, Odd_X, Odd_2,ab ,bc)
再次在spyder上运行良好
编辑:我通过Replit运行了这段代码,所以我可以看到网页。事实证明,由于某种原因,整个网站都加载了错误的值。所以基本上代码是好的,但是网站是错误的。我比以前更困惑了。
的例子:
使用Google Colab时,您的IP和语言标识符可能会更改。这可能导致不一致或不同的页面布局。
尝试截图并获取页面源,并与本地测试进行比较。还要检查定位器是否仍然与colab
中的页面源代码匹配。请确保你使用的是同一个浏览器。