无法在我的脚本中运行循环

时间:2017-11-05 14:21:53

标签: python python-3.x selenium selenium-webdriver web-scraping

这是The Link此主题的后续问题。我希望我的脚本从第一页解析名称和电话,然后单击下一页按钮并执行相同操作,直到所有下一页链接都用完为止。但是,当我单独执行我的下面的脚本(while循环中的部分)时,它可以正常工作,但是当两者都在while循环中包装然后是后一部分时,我的意思是分页部分无法执行。我尝试过几次,但后果总是一样的。我如何修复它以便它将从第一页解析文档并单击下一页链接来完成剩下的工作?

剧本:

while True:
    for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".ajaxBtn"))):
        item.click()
        time.sleep(3)
        root = fromstring(driver.page_source)
        try:
            name = root.cssselect("#popclick .modal-header .h4")[0].text.strip()
            phone = root.cssselect("td:contains('Phone:')+td")[0].text.strip()
        except:
            pass
        print(name,phone)
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#popclick .modal-header button"))).click()
        driver.execute_script("window.scrollTo(0, {})".format(item.location['y']))

    try:
        link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, ">")))
        link.click()
        wait.until(EC.staleness_of(link))
    except:
        break

1 个答案:

答案 0 :(得分:1)

如果您只是遍历所有页面,请点击">"顶部分页上的按钮(可见一个),但是当您同样进行刮擦​​时,将页面向下滚动到底部分页。在这种情况下,顶级分页不再可见,因此您的循环在

上制动
try:
    link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, ">")))
    link.click()

因为您无法点击">"在顶部。

你需要处理底层分页。只需替换

link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, ">")))

link = driver.find_elements_by_link_text(">")[1]