我编写了一个测试,可以分析来自网页的链接,并在循环中单击每个链接,然后返回到主页。但是每次迭代都伴随着一次又一次地解析整个网页并覆盖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/