我正在执行下一页测试。我单击下一页时使用循环捕获新数据。单击功能成功,但是似乎在执行next_page功能后driver.page_source
没有更新。由于仍在循环中,因此代码将运行大约两次,然后可以对其进行更新。只是在极少数情况下它才能成功。
如果您这样使用,没关系:
NextPage()
time.sleep(2)
data=driver.page_source
currentpage = GetCurrentPage(data)
我知道driver.page_source将需要时间才能完全加载。但是,对于较大的页面总数,使用time.sleep()
是很耗时的。然后,我尝试使用WebDriverWait
等待Image类加载(此网站每页有很多图像),但这无济于事。
page=int(input("Please input page number:"))
if 1< page < 100:
data=driver.page_source
currentpage = GetCurrentPage(data)
while True:
if currentpage<page:
try:
CaptureData(data,file)
print(currentpage)
time.sleep(0.5)
NextPage()
# time.sleep(1)
WebDriverWait(driver,5).until(EC.presence_of_element_located((By.CLASS_NAME,'J_ItemPicA')))
data=driver.page_source
currentpage = GetCurrentPage(data)
print(currentpage)
except TimeoutException:
print("Timeout!")
except Exception as e:
print("Unexpected error!",e)
break
else:
print('testa')
CaptureData(data,file)
break
elif page ==1:
CaptureData(driver.page_source,file)
大多数情况下,以上代码的输出如下:
Please input page number: 2
1
1
1
2
testa
如果您可能需要GetCurrentPage代码:
def GetCurrentPage(data):
soup=BeautifulSoup(data,'lxml')
comments = soup.find_all("li", class_="item active")
cp = re.findall('\d', comments[0].text)
currentpage = int(''.join(cp))
return currentpage
链接为there,但中文链接。
还有其他建议吗? 谢谢你一百万。
答案 0 :(得分:0)
自己解决了问题。
使用WebDriverWait
。获取当前页面,然后确定是否等于前一页加1。
代码如下:
try:
CaptureData(data, file)
print(currentpage)
time.sleep(0.5)
NextPage()
# time.sleep(2)
element = WebDriverWait(driver, 10).until(EC.text_to_be_present_in_element(
(By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active'),
str(int(currentpage) + 1)))
if element:
data = driver.page_source
currentpage = GetCurrentPage(data)
print(currentpage)