CodeGym /Java 课程 /Python SELF ZH /通过最少的动态元素访问多个页面

通过最少的动态元素访问多个页面

Python SELF ZH
第 38 级 , 课程 1
可用

1. 准备导航

在开始我们的冒险旅程之前,我们需要准备好正确的工具:Selenium 和一点点技巧。我们假设你已经知道如何设置 Selenium 和浏览器驱动,所以开搞吧!

设置驱动

Python

from selenium import webdriver

# 启动浏览器驱动,例如 Chrome
driver = webdriver.Chrome()

# 打开我们冒险的第一个页面
driver.get("http://example.com/start-page")

到目前为止一切正常——我们打开了浏览器并加载了起始页面。但有趣的事情从这里开始:我们可不想只停留在一个页面上,我们想访问每个邻近的页面!

2. 分页导航:页面间的漫步

导航页面最简单友好的方式是分页。你肯定见过那些页面底部的小数字吧?它们就像路标一样:“你的下一站是页面 2”。

从页面中提取数据

在我们开始旅行之前,我们想从当前页面收集一些信息。假设是商品列表或文章标题。

Python

def extract_data():
    # 找到页面上我们感兴趣的所有元素,例如标题
    titles = driver.find_elements_by_class_name("item-title")
    for title in titles:
        print(title.text)  # 是的,我们只是打印文本,但你可以将其保存到任何地方

extract_data()

如果你之前的课程都偷懒了,这段代码会寻找具有类名item-title的所有标题并打印出来。

导航到下一页

现在我们收集完数据,该是继续前进的时候了。分页通常以链接按钮的形式表示,指向下一页或前一页。我们需要找到这些按钮并点击它们。

Python

def go_to_next_page():
    try:
        # 找到下一页的按钮并点击
        next_button = driver.find_element_by_link_text("Next")
        next_button.click()
    except NoSuchElementException:
        # 如果没有按钮,则表示已经到达页面列表的末尾
        print("页面列表结束。")

这个函数寻找带有文本“Next”的链接。如果找到了,它点击链接并跳转到下一页。如果没有找到,我们的机器人就知道它已经到达了——好吧,至少是这次页面序列的尽头。

3. 页面循环遍历

我们还缺点啥才能完美?对了,是循环!让我们把这一切组合成一个方便的循环,让我们的机器人可以像个专业选手一样遍历所有可用页面。

Python

while True:
    extract_data()  # 从当前页面收集数据
    go_to_next_page()  # 跳转到下一个页面
    time.sleep(2)  # 小歇一下,避免惊到服务器

现在我们的机器人勇敢地访问了所有可以点击“Next”按钮的页面。这段代码会一直执行,直到页面结束。记住,给请求之间留点小间隙,这样服务器才会喜欢你。毕竟,没人喜欢垃圾邮件,尤其是网站管理员。

4. 动态交互

小伙伴们,生活可没分页导航那么简单。有时候页面表现得像个隐形忍者,数据会随着滚动动态加载。不用怕,我们会搞定它。

显性等待

等待操作可以让你的代码像个禅师一样冥想,直到需要的元素变得可用。这特别适合那些内容不会立马加载的场景。

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def wait_for_element(locator):
    try:
        element = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, locator))
        )
        return element
    except TimeoutException:
        print("元素未找到。")

通过这个函数,你的机器人可以与动态加载内容保持和谐,耐心等待元素变得可用。

页面滚动

针对包含无限滚动这样“神奇”页面的动态内容,我们可能需要向下滚动页面,以加载更多的元素。

Python

def scroll_down():
    # 使用 JavaScript 向下滚动
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

通过 JavaScript 脚本可以帮助页面平滑向下滚动,允许加载更多内容。这个技巧可以在循环中使用,以应对无限滚动页面。

5. 特殊情况和小技巧

超越示例是一场充满惊喜的冒险手册。想象一下,你的机器人像你一样需要为不同情境做好准备。

如果没有“Next”按钮,但有带有页码的分页选项,可以使用动态方法,直接将页码插入 URL 中。如果你的网站突然变得像忍者一样隐藏一些页面,请调整你的脚本,使其可以适应,时刻准备迎接未知挑战。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION