selenium 用法总结

selemium 的安装


selemium 简单示例

from selenium import webdriver
#以下三种浏览器的作用是相同的
driver = webdriver.PhantomJS()   #无头浏览器,即没有界面的浏览器,
driver = webdriver.Firefox()     #火狐浏览器
driver = webdriver.Chrome()      #谷歌浏览器

#driver.get 方法将打开URL中填写的地址,注意,该操作自动打开火狐和谷歌浏览器界面
driver.get('https://www.xxx.com') 

print("网页的内容:",driver.page_source) #打印网页的内容

driver.close() #该语句只会关闭一个标签页
或者
driver.quit()  #该语句关闭整个浏览器

与页面交互

<input type="text" name="passwd" id="passwd-id" />

#通过下面的方法查找它
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")

element.send_keys("你好")  #在该文本框中输入“你好”


element.clear() #当输入一些文本时,这些输入框中可能原有的文本不会被自动清除掉,相反,你的输入会继续添加到已存在文本之后,可以通过该语句去清除input或者textarea元素中的内容

element.click()  #该语句是相当于鼠标的点击操作

在不同的窗口和框架之间移动

在不同的窗口之间移动

for handle in driver.window_handles:
    driver.switch_to_window(handle)

操作Cookies

获取当前 URL 下的Cookies值

driver.get_cookies()
**设置Cookies**
cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}

driver.add_cookie(cookie)

等待页面加载完成

假设该 www.xxx.com页面的内容如下:

<input type="text" name="passwd" id="passwd-id" />

显式等待
第一种方式:等待一个确切的时间段,无论页面是否加载完成,都必须执行下一个操作

time.sleep(3)

第二种方式:只等待需要的时间。WebDriverWait结合ExpectedCondition 是实现的一种方式

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Firefox()
driver.get("http://www.xxx.com")
element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "passwd-id"))

隐式等待
如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期

from selenium import webdriver

driver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://www.xxx.com")
myDynamicElement = driver.find_element_by_id("passwd-id")

参考文档:http://selenium-python-zh.readthedocs.io/en/latest/

<think>好的,我需要回答用户关于Python Selenium循环用法的问题。首先,用户希望了解如何在Selenium中使用循环,可能涉及到重复操作,比如遍历元素、处理分页或数据抓取。用户可能是刚开始学习Selenium,需要基础的示例和清晰的步骤。 首先,我应该回忆Selenium的基本操作,比如定位元素的方法,如find_element和find_elements,还有常见的循环结构如for循环和while循环。然后,考虑用户可能的场景,比如处理多个相似元素,比如列表项、表格行或分页按钮。 接下来,需要组织回答的结构。先介绍循环在Selenium中的常见用途,然后分点说明不同的循环应用场景,每个场景给出具体的代码示例,并解释代码的作用。这样用户能逐步理解如何应用循环解决实际问题。 要注意用户可能遇到的问题,比如元素未找到、动态加载内容或等待时间的问题,这时候可能需要提到隐式等待或显式等待,但用户问题主要是循环用法,所以可能不需要深入,但可以稍微提及以确保代码的健壮性。 另外,要确保代码示例正确,比如使用正确的语法,比如find_elements_by_css_selector在旧版本中的用法,但现在可能需要用find_elements(By.CSS_SELECTOR, ...),所以需要确认Selenium的最新用法,避免用户复制代码时出错。 还需要检查是否需要导入模块,比如from selenium.webdriver.common.by import By,这样用户不会遗漏必要的导入语句。 然后,考虑分页处理的例子,比如点击“下一页”按钮直到不可用,这里需要用到while循环,并处理可能的异常,比如NoSuchElementException,但为了简化,可以先用find_elements来判断是否存在元素。 最后,可能需要提到循环中的异常处理和等待时间的最佳实践,但保持回答简洁,重点在循环结构本身。 总结回答的结构:先介绍循环的重要性,然后分三个常见用例:遍历元素列表、分页处理、输入多个数据。每个用例给出步骤和代码示例,最后总结注意事项,比如等待和异常处理。确保使用中文,代码部分用Markdown格式,行内公式正确,独立公式单独成段,但在这个问题中可能不需要数学公式,所以主要注意代码块的正确格式。</think>Python Selenium 循环用法主要用于自动化重复性操作,例如批量点击、遍历数据或处理动态加载内容。以下是分步详解及典型场景示例: --- ### 一、遍历元素列表 **场景**:批量获取页面中同类元素(如链接、表格行等) ```python from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("https://example.com") # 定位所有符合条件的元素(例如class为item的元素) elements = driver.find_elements(By.CLASS_NAME, "item") # 使用for循环逐个操作 for element in elements: print(element.text) # 打印文本 # element.click() # 点击操作 ``` --- ### 二、分页处理 **场景**:自动翻页直到最后一页 ```python while True: # 处理当前页数据 items = driver.find_elements(By.CSS_SELECTOR, ".product") for item in items: print(item.text) # 查找下一页按钮 next_buttons = driver.find_elements(By.XPATH, "//a[text()='下一页']") if not next_buttons: # 如果找不到按钮则退出 break next_buttons[0].click() # 点击下一页 driver.implicitly_wait(3) # 等待加载 ``` --- ### 三、表单循环输入 **场景**:向多个输入框依次填写数据 ```python data_list = ["张三", "李四", "王五"] input_fields = driver.find_elements(By.TAG_NAME, "input") for i in range(len(data_list)): input_fields[i].send_keys(data_list[i]) ``` --- ### 四、循环结合显式等待 **关键点**:处理动态加载内容时需添加等待 ```python from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 等待元素出现后再操作 wait = WebDriverWait(driver, 10) elements = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "dynamic-item"))) for element in elements: element.click() ``` --- ### 五、注意事项 1. **防重复操作**:循环中确保元素状态未改变(如避免重复提交) 2. **异常处理**:用`try-except`捕获`NoSuchElementException` 3. **性能优化**:适当设置等待时间,避免因加载慢导致循环中断 通过合理使用循环,可显著提升 Selenium 自动化脚本的效率和灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值