脚本无法继续点击加载更多按钮

问题描述 投票:1回答:2

我在Python中编写了一个与selenium相关联的脚本,以便继续点击MORE按钮以加载更多项目,直到没有新项目从网页加载。但是,我的下面的脚本可以在该页面底部的MORE按钮上单击一次。

Link to that site

到目前为止,这是我的尝试:

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

link = "https://angel.co/companies?company_types[]=Startup&company_types[]=Private+Company&company_types[]=Mobile+App&locations[]=1688-United+States"

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(link)
while True:
    for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".results .name a.startup-link"))):
        print(elems.get_attribute("href"))

    try:
        loadmore = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"[class='more']")))
        driver.execute_script("arguments[0].scrollIntoView();", loadmore)
        loadmore.click()
    except Exception:break

driver.quit()

我怎么能一直点击那个MORE按钮,直到没有这样的按钮来点击并解析链接,因为我已经尝试过使用for loop

python python-3.x selenium selenium-webdriver web-scraping
2个回答
2
投票

我已经设法解决了在现有脚本中追求Andersson先生逻辑的问题。这是修改后的脚本的样子。

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

link = "https://angel.co/companies?company_types[]=Startup&company_types[]=Private+Company&company_types[]=Mobile+App&locations[]=1688-United+States"

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get(link)
while True:
    try:
        loadmore = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR,"[class='more']")))
        driver.execute_script("arguments[0].click();", loadmore)
        wait.until(EC.staleness_of(loadmore))
    except Exception:break

for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".results .name a.startup-link"))):
    print(elems.get_attribute("href"))

driver.quit()

0
投票

为什么不呢?

        while (driver.FindElements(By.ClassName("more")).Count > 0)
        {
            driver.FindElement(By.ClassName("more")).Click();
            //Some delay to wait lazyload to complete 
        }

c#例子。非常确定它也可以用python完成

© www.soinside.com 2019 - 2024. All rights reserved.