嗨,我是一个网络抓取新手,一直在尝试使用Selenium用python抓取论坛
我想让Selenium点击"下一步",直到最后一页,但我不知道如何打破循环。
当我通过部分链接找到下一个按钮时,自动单击将继续到下一个线程,例如page1-
while True:
next_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT, "Next")))
next_link.click()
当我按类名找到下一个按钮时,自动单击将在到达最后一页时单击“prev”按钮
while True:
next_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "prevnext")))
next_link.click()
我的问题是:
>
您可以使用任何提供唯一标识的定位器。最佳做法按以下顺序排列。
当它没有找到您可以使用try block的元素时,从while循环中出来,如下所示。中断命令用于相同的目的。
while True:
try:
next_link = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "prevnext")))
next_link.click()
except TimeoutException:
break
您可以使用下面的代码单击“下一步”按钮,直到到达最后一页,如果按钮不存在,则中断循环:
from selenium.common.exceptions import TimeoutException
while True:
try:
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Next ›"))).click()
except TimeoutException:
break
您需要考虑以下几点:
>
click()
而不是预期的条件,因为presence_of_element_located()
你需要使用element_to_be_clickable()
。try-catch
块中调用 click()
并在发生异常时发生
异常。下面是工作代码块:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument('disable-infobars')
driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get("https://forums.hardwarezone.com.sg/money-mind-210/hdb-fully-paid-up-5744914.html")
driver.find_element_by_xpath("//a[@id='poststop' and @name='poststop']//following::table[1]//li[@class='prevnext']/a").click()
while True:
try :
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a[@id='poststop' and @name='poststop']//following::table[1]//li[@class='prevnext']/a[contains(.,'Next')]"))).click()
except :
print("No more pages left")
break
driver.quit()
控制台输出 :
No more pages left
我有一个包含36个按钮的响应网站。乍一看,我们只能看到12个按钮,我需要验证它们的文本值,我知道如何做到这一点。但问题是我需要点击下一步按钮,直到它不可见。那么在c#中如何用selenium来做呢? 此外,在单击“下一步”时,我们需要将按钮的文本存储在一个列表或数组中,这样我就可以将所有列表添加到一个新列表中并进行比较。 看看下面的代码,我试过了。 现在上面的工作正常,但当“下一步”按钮不可用时,
这是我第一个问题的后续问题,我正在尝试抓取一个网站,让Selenium点击(直到无法点击为止)并收集结果。 这是来自网站的html标签,带有按钮: 我试过这个代码: 我也查过这个问题,但还是没能解决。 有什么想法吗?
在我的程序中,它将单击浏览器中的一个按钮,并且在该页面中,应该会出现另一个按钮。出现该按钮后,我的程序将立即运行下一个操作来单击下一个按钮。我目前收到此错误: ElementNotVisibleException:消息:元素不可见 因此,我假设我正在调用该操作,以便在该按钮出现之前单击下一个按钮。我的问题是,我该怎么做才能让我的程序等到我可以点击按钮,再点击按钮? 这就是我的程序底部的代码的样子。
我正试图让JQuery在按下下一个按钮时自动单击该按钮。在互联网上,我发现应该是这样的(查看JQuery部分)。但由于某种原因,它不起作用。 它们必须在同一个代码中吗? 我尝试过的:JQuery: 表单中的按钮1 HTML: 表单中的按钮2 HTML:
问题内容: 我正在尝试使用selenium和python 在该特定网站上单击以查看更多信息。这就是我测试的方式,并且出现以下错误 这是可行的: 我想念什么? 问题答案: 这是一个非常简单的运行代码段,该代码段使用XPATH查找按钮“ Se flere”。
问题内容: 我有2个视图控制器,应根据用户输入进行交换。因此,我想根据从文本文件获得的输入以编程方式切换视图。 关于如何以编程方式单击按钮或使用输入加载特定ViewController的任何帮助? 问题答案: 要以编程方式触发事件,您需要致电 - 迅捷3