我编写了一个测试,可以分析来自网页的链接,并在循环中单击每个链接,然后返回到主页。但是每次迭代都伴随着一次又一次地解析整个网页并覆盖links数组,尽管每次迭代只需要一个链接。我知道这是低效的。我该如何优化呢?

我尝试只解析一次链接,然后在一个循环中遍历它们。第一次迭代后,它返回(返回主页)并尝试单击第二个链接,但它不是交互式的(我认为这是因为每次访问该链接时存储在links数组中的Web元素都会发生变化)页)。

def setUp(self):
    self.driver = webdriver.Chrome()
    self.driver.get('https://yandex.ru')

def test_01(self):
    driver = self.driver
    links = []
    time.sleep(3)
    links = driver.find_elements_by_css_selector("a")
    for i in range(len(links)):
        links = driver.find_elements_by_css_selector("a")
        links[i].click()
        driver.get('https://yandex.ru')
        time.sleep(3)


我期望有更有效的解决方案。

最佳答案

当您离开页面时,WebElements随着DOM的更改而失效,因此我建议您使用List Comprehension并将WebElements的列表转换为链接列表的文本。
一旦完成,您应该能够使用normalize-text()函数,以防文本属于子元素或具有开始/结尾空格
最后但并非最不重要的一点是考虑使用Explicit Wait,以防万一通过AJAX调用填充了链接。


示例代码:

driver.get("http://yandex.ru")
links = [link.text for link in driver.find_elements_by_css_selector("a")]
for link in links:
    WebDriverWait(driver, 10) \
        .until(expected_conditions
        .presence_of_element_located(
        (By.XPATH, "//a[normalize-space()='" + link + "']"))).click()
    # do what you need here
    print(driver.title)
    driver.back()
driver.quit()

关于python - 如何改善解析链接的python脚本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57938896/

10-12 00:24
查看更多