【问题标题】:Click on 'Next' button using Selenium until all pages are parsed: Python3使用 Selenium 单击“下一步”按钮,直到解析所有页面:Python3
【发布时间】:2018-11-15 15:37:25
【问题描述】:

我正在尝试单击网页的“下一步”按钮,但收到错误消息。 我到达餐桌的步骤:

  1. 转到 ibl.mdanderson.org/fasmic/#!
  2. 键入并选择 AKT1(3 个突变)(注意:“GO”按钮不起作用,请单击下拉菜单中的选项)
  3. 单击带有文本“MS”的绿色按钮,将出现一个新表。
  4. 在这个新表格中,将有一个名为文学的选项卡。
  5. 在文献选项卡的末尾,将有一个“下一步”按钮转到下一页。

我需要解析文献标签中的数据(效果很好)。但是,我无法转到下一页来解析同一张表中的数据。

以下是代码:

driver.find_element_by_xpath("//*[contains(text(),'Literature')]").click()
        for elements in driver.find_elements_by_css_selector("#literature_div [ng-repeat]"):
            print(elements.text,"\n")
            driver.implicitly_wait(5)
driver.find_element_by_xpath('//a[@ng-click="selectPage(page + 1, $event)"]').click()

执行此操作后,我收到以下错误:

"消息: 的元素引用已过时;要么元素为 no 不再附加到 DOM,它不在当前帧上下文中,或者 文档已刷新”

【问题讨论】:

  • 我看到这些项目正在控制台中记录。 Here's a thread 有人捕获日志。可能比解决该消息更容易。

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


【解决方案1】:

在文学标签的末尾尝试

driver.find_element_by_xpath('/html/body/div/div[2]/div[2]/div[1]/div/div/div[3]/div/div/div[5]/div/ul/li[7]/a').click()

【讨论】:

  • 我仍然收到同样的错误:消息:
    的元素引用已过时;要么元素不再附加到 DOM,它不在当前框架上下文中,要么文档已被刷新
【解决方案2】:

你试过了吗

driver.find_element_by_css_selector('[ng-click="selectPage(page + 1, $event)"]').click()

您可以改进,但这适用于点击(假设我的目标是正确的下一步)

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = "https://ibl.mdanderson.org/fasmic/#!/"
d = webdriver.Chrome()
wait = WebDriverWait(d, 10)
d.get(url)
d.find_element_by_css_selector('[type=text]').send_keys('AKT1 (3 mutations)')
d.find_element_by_css_selector("input[type='text']").send_keys(Keys.RETURN)
btn = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".btn.btn-default.btn-tab-avail")))
btn.click()
d.find_element_by_css_selector("[heading=Literature]").click()

ele = wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, "#literature_div [ng-repeat]"), "PMID"))
eles = d.find_elements_by_css_selector("#literature_div [ng-repeat]")

d.find_element_by_css_selector('[ng-click="selectPage(page + 1, $event)"]').click()

#d.quit()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2018-06-13
    相关资源
    最近更新 更多