我是硒的新手。我定义了一个批处理过程,在其中处理几个页面。这些页面都是相等的,但具有不同的数据。因此,我用相同的代码处理所有这些页面。当我开始该过程时,它可以很好地工作,但是,有时,我总是在同一时间点遇到相同的错误。我发现当我尝试从网页中获取数据时,有两个表在流程无法正常工作时无法获取其代码。而且我什么都不懂,因为如果我在先前失败的同一页面中重新启动过程,那么它将正常工作!!!因此,硒似乎并不总是能正确加载网页内容。
我将python 3和selenium与以下代码结合使用:
caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "normal"
#b = WebDriver(executable_path="./chromedriver")
b = webdriver.Chrome(desired_capabilities=caps, executable_path="./chromedriver")
b.set_window_size(300, 300)
b.get(url)
html = b.page_source
self.setSoup(bs4.BeautifulSoup(html,'html.parser'))
b.close()
如何避免始终获得不时产生的错误?
编辑我:
我检查过,当过程正常运行时,这句话向我返回了两个表格:
tables = self.get_soup().findAll("table", class_="competitor-table comparative responsive")
但是,当处理失败时,此代码将返回0个表。我以前怎么说,如果我再次处理以前给我错误的网页,然后可以正常工作,因此,它将返回两个表而不是零。
由于这个原因,我认为硒并不总是向我返回页面的代码,因为对于同一个页面,当它工作不正确时,我将返回零张表,而当它工作正常时,则将我返回两个表格。
编辑II:
例如,现在我在此页面中有一个错误:
http://www.fiba.basketball/euroleaguewomen/18-19/game/1912/Olympiacos-Perfumerias-Avenida#|tab=boxscore
我尝试检索但没有得到的表是这些:
您怎么看,这个CSS类有两个表。我不发布表的内容,因为它们太大了。
这是我尝试获取表内容的代码:
def set_boxscore(self):
tables = self.get_soup().findAll("table", class_="competitor-table comparative responsive")
local = False
print("Total tablas: {}".format(len(tables)))
for t in tables:
local = not local
if local:
self.home_team.set_stats(t.tfoot.find("tr", class_="team-totals"))
else:
self.away_team.set_stats(t.tfoot.find("tr", class_="team-totals"))
rows = t.tbody.findAll("tr")
for row in rows:
time = row.find("td", class_="min").string
if time.find(MESSAGES.MESSAGE_PLAYER_NOT_PLAY) == -1:
if local:
player = PlayerEuropa(row)
self.home_players.append(player)
else:
player = PlayerEuropa(row)
self.away_players.append(player)
在这段代码中,我写出了可以在其中找到的总表以及如何看到,现在我有零张表:
现在,如果我重新启动该过程,那么它将对我正常工作。
编辑III:
关于我定义的过程的另一个示例。这些网址已正确处理。
http://www.fiba.basketball/eurocupwomen/18-19/game/2510/VBW-CEKK-Ceglèd-Rutronik-Stars-Keltern#|tab=boxscore
http://www.fiba.basketball/eurocupwomen/18-19/game/2510/Elfic-Fribourg-Tarbes-GB#|tab=boxscore
http://www.fiba.basketball/eurocupwomen/18-19/game/2510/Basket-Landes-BBC-Sint-Katelijne-Waver#|tab=boxscore
但是,当我尝试处理其他网址时,我得到了前面解释的错误:
http://www.fiba.basketball/eurocupwomen/18-19/game/0111/Gorzow-Sparta-k-M-R--Vidnoje#|tab=boxscore
要渲染网页,我使用硒,并且我总是在过程开始时就这样做。我使用以下代码获取网页的内容:
def __init__(self, url):
"""Constructor"""
caps = DesiredCapabilities().CHROME
caps["pageLoadStrategy"] = "normal"
#b = WebDriver(executable_path="./chromedriver")
b = webdriver.Chrome(desired_capabilities=caps, executable_path="./chromedriver")
b.set_window_size(300, 300)
b.get(url)
html = b.page_source
self.setSoup(bs4.BeautifulSoup(html,'html.parser'))
b.close()
此代码之后,是我开始检索网页信息的时间。出于某种原因,有时网页无法完全呈现,因为当我尝试获取某些信息时,找不到该信息并得到前面解释的错误。