使用Selenium python,我想循环浏览每个“文本链接”中的页面,同时存在“文本链接”
代码:
while(driver.find_element_by_link_text("Txt link") == True):
driver.find_element_by_link_text("Txt link").click()
错误分期
Traceback(最近一次调用最后一次):文件“phishing.py”,第8行,in 类报告(unittest.TestCase):在报告中输入第26行“phishing.py” while(driver.find_element_by_link_text(“Ver mais ...”)):文件“C:\ Python27 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, 第389行,在find_element_by_link_text中 return self.find_element(by = By.LINK_TEXT,value = link_text)文件“C:\ Python27 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, 第855行,在find_element中 'value':value})['value']文件“C:\ Python27 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py”, 第308行,执行中 self.error_handler.check_response(response)文件“C:\ Python27 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py”, 第194行,在check_response中 提出exception_class(message,screen,stacktrace)selenium.common.exceptions.NoSuchElementException:消息:没有这样的 element:无法定位元素:{“method”:“link 文本“,”选择器“:”Ver mais ......“
答案 0 :(得分:1)
如果我们使用while(driver.find_element_by_link_text("Txt link") == True): or while(driver.find_element_by_link_text("Txt link").is_displayed() == True):
如果元素没有显示,那么呢?它会抛出异常吗?所以去WebDriverWait等待元素。
在Java中,我使用try / catch并在try中放置,如果我希望有些时候该元素可能不可用但仍需要进一步移动。
答案 1 :(得分:0)
您可以通过以下方式解决问题:
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.common.exceptions import TimeoutException
while True:
wait(driver, 5).until(EC.element_to_be_clickable((By.LINK_TEXT, "Txt link"))).click()
except TimeoutException:
break
这应该允许您在链接可用时单击该链接
答案 2 :(得分:0)
当以下语句无法在给定页面上找到webElement时,将抛出noSuchElementFoundException。您必须捕获该异常以避免执行暂停。
driver.find_element_by_link_text("Txt link")
并且你必须将循环逻辑纠正为有限状态。如果不指定初始计数和增量策略,则无法在单个项目上运行循环。
答案 3 :(得分:0)
您必须使用FindElements而不是findElement将其存储在列表中,并使用for循环遍历列表。每当你尝试相同的元素时,那就是问题。
使用FindElements,它会将所有元素放在列表中,您的问题就会得到解决。
@note:如果打开一个新的浏览器窗口,点击链接后,你也需要处理它。
答案 4 :(得分:0)
必须使用时间睡眠,尤其是对于包含许多可点击元素的大页面而言。因为在进行第一次单击时,必须加载该页面才能进行第二次单击。
import time
while(driver.find_element_by_link_text("Txt link")):
driver.find_element_by_link_text("Txt link").click()
time.sleep(3)
答案 5 :(得分:0)
创建了一个很好的解决方法。下面的代码每十秒钟刷新一次页面,以查找所需的元素。循环最多400秒
y = 1
while y < 400:
try:
driver.refresh()
driver.find_element_by_link_text("Txt link").click()
y = 401
except:
time.sleep(10)
y = y + 10
答案 6 :(得分:-1)
您可以尝试以下代码: -
while(driver.find_element_by_link_text("Txt link").is_displayed() == True):
driver.find_element_by_link_text("Txt link").click()