当使用ajax加载pythonselenium中的数据时如何滚动div

2024-09-29 17:20:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用windows8中的chrome webdriver开发python selenium。我面对一个page,它在使用ajax滚动时加载数据。 Link 1Link 2Link 3

谁能给我一条正确的道路吗。在

编辑--------

这是亚历克斯回答后我的部分代码

    nam = driver.find_element(By.CLASS_NAME ,'_wu')

    #get length of review
    revcnt = driver.find_element(By.XPATH ,"//span[@class='_Mnc _yz']")
    revcnt = int(revcnt.text.replace(" reviews","").strip())
    print revcnt
    # wait for reviews to appear
    wait = WebDriverWait(driver, 10)
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.review-snippet")))
    #reviews=[]
    while True:
        reviews = driver.find_elements_by_css_selector("div._ju")
        if len(reviews)<revcnt:
            driver.execute_script("arguments[0].scrollIntoView();", reviews[-1])
        else:
            driver.quit()
        print len(reviews)

但是从while循环中逃出有问题!在

我试过了。在


Tags: ofbylendriverelementfindchromereview
1条回答
网友
1楼 · 发布于 2024-09-29 17:20:16

做一个循环,每次迭代滚动到列表中最后一个“review”的视图(对我有用):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.google.com/search?q=a1%20plumbing%20boise&gws_rd=ssl#gws_rd=ssl&lrd=0x54aeff4cb0b24461:0x23720b81e2bed658,1")

# wait for reviews to appear
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.review-snippet")))

while True:
    reviews = driver.find_elements_by_css_selector("div._ju")
    driver.execute_script("arguments[0].scrollIntoView();", reviews[-1])

注意这里的循环是无止境的-您需要弄清楚如何退出循环。例如,您可以统计滚动到视图前后的评论数,如果没有加载更多的评论,则退出循环。或者,你可以检查旋转圈是否存在。一旦它没有显示在滚动-这意味着没有更多的评论加载左边。在

这里有一个方法可以检测到没有更多的评论可以加载-检查下一次滚动后评论对话框的滚动高度是否没有改变-这与人类检测它的方式很接近:

^{pr2}$

我不喜欢这里有time.sleep(),希望你有更好的主意来解决这个问题。在

相关问题 更多 >

    热门问题