selenium爬虫入门(3)

本文介绍了如何使用Selenium进行frame和窗口切换,详细讲解了radio框、checkbox框和select框的操作,并展示了模拟鼠标移动和冻结界面的方法。通过switch_to切换frame和窗口,对选择框的状态进行判断和操作,利用ActionChains模拟复杂用户行为,以及利用JavaScript暂停界面更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from selenium.webdriver import Chrome
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver=Chrome(options=options)

frame/窗口 切换

frame切换

在html语法中,frame元素或者iframe元素的内部会包含一个被嵌入的 另一份html文档。而selenium对打开网页的操作范围默认是当前的html和frame(iframe)本身, 并不包含被嵌入的html文档里面的内容。
要操控被嵌入frame(iframe)里的 html文档中的元素, 就必须切换操控范围到被嵌入的文档中。

用WebDriver的switch_to切换

  • 进入frame(iframe):
    driver.switch_to.frame(frame_reference)写在要定位frame里的元素之前。后续选择和操作界面元素就都是在这个frame里面的元素。
frame_reference代码示例
属性namedriver.switch_to.frame(“name值”)
IDdriver.switch_to.frame(“ID值”)
WebElement 对象(find系列的方法定位元素)driver.switch_to.frame(driver.find_element(By.ID,“ID值”))
  • 切换回原来的主html:
    driver.switch_to.default_content() 后续选择和操作界面元素都会在原来的主html中(frame之外)进行。

窗口切换

在网页上操作的时候,点击一个链接或者按钮,有时会打开一个新窗口,但这时WebDriver对象对应的还是老窗口,即自动化操作也还是在老窗口进行。

用WebDriver的switch_to切换

此时点击了元素,浏览器有了新窗口,进入新窗口:

  • step1:通过WebDriver的window_handles 属性driver.window_handles得到当前浏览器所有窗口句柄(网页窗口的ID)的列表对象。
  • step2:对列表中的每个句柄,调用 driver.switch_to.window(handle)方法切入到每个窗口,其中handle即为每个句柄。
  • step3:检测切入窗口对象的属性(可以是标题栏driver.title,地址driver.current_url栏等),判断是否为目标窗口,若是,就跳出循环。继续对该窗口内的元素进行操作。
for handle in driver.window_handles:
    # 先切换到该窗口
    driver.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if 'littleyueyue' in wd.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break
#继续对该窗口内的元素进行操作     

返回原来的窗口:

  • 方式1:
    沿用上面的方法,利用WebDriver.window_handows得到当前浏览器的所有窗口句柄,循环遍历找到之前的浏览器。

  • 方式2:
    在切换进新窗口之前,用变量储存当前窗口mainWindow=driver.current_window_handle
    之后要切回时,在新窗口中直接使用driver.switch_to.window(mainWindow)即可

窗口关闭

若要关闭新窗口,则需要新的窗口中使用driver.close()进行关闭,再使用driver.switch_to.window(mainWindow)跳转回到原来的窗口
区别driver.quit()是关闭浏览器驱动

选择框

常见的选择框包括: radio框、checkbox框、select框
在这里插入图片描述

radio框

radio框的选择选项,先定位到要选择的元素,用webElement的click方法模拟用户点击即可。
由于radio框是单选框,所以选择了其一,原来选中的选项会自动取消。

补充知识:
输入框和radio框的tag都是input,但是输入框中type属性时未指定的,radio框的type值是radio
<input id="input1" value="请输入查询信息">
<input id="search" type="radio" value="科技" checked="checked">
(checked表示该选项是几个选项中默认选择的值)

checkbox框

由于checkbox框是多选框,为了保证只选择我们需要的选项,必须考虑到当前该复选框内的选中状态 ,若已勾选,就不再点击(否则反而会取消该选择)。
方案:

  • step1:把已选中的选项都点击一遍,确保都是未选状态
elements_list=driver.find_elements(By.CSS_SELECTOR,'input[checked="checked"]')
for element in elements_list:
    element.click()
  • step2:点击目标选项

补充知识:
checkbox框的tag也是input,但是checkbox框的type值是checkbox
<input id="search" type="checkbox" value="科技" checked="checked">

selecet 框

可多选的select框会多一个multiple属性,如<select id="search" multiple>
针对Select 选择框Selenium 专门提供了Select类进行操作

示例:<option value="科技">大数据</option>
先导入Select类,再创建Select对象,参数select框的webElement对象,注意是定位到select框不是具体选项。

from selenium.webdriver.support.ui import Select
select = Select(wd.find_element(定位到select框))#
select类方法说明代码
select_by_value根据选项的 value值Select.select_by_value(‘科技’)
select_by_index根据选项的次序 (从0开始)
select_by_visible_text根据选项的可见文本Select.select_by_visible_text(‘大数据’)
deselect_by_value根据选项的value属性值去除选中元素
deselect_by_index根据选项的次序,去除选中元素
deselect_by_visible_text根据选项的可见文本去除选中元素
deselect_all去除选中所有元素

补充知识:
select框的tag是select<select id="search" > ,具体每个选项的标签是option。

select单选框

不管原来选的是什么,直接用Select类中的方法进行选择即可。
前提:

  1. 导入了Select类 from selenium.webdriver.support.ui import Select
  2. 传入select的参数为select框的webElement

select多选框

和CheckBox框一样,要先考虑当前该框内的选中状态
方案:

  • step1:用Select类中的deselect_all(),清除所有已经选中的选项
  • step2:用Select类中的方法进行选择

元素操控

之前在selenium爬虫入门(1)中学习了用find_element()选择元素,用WebElement的.click()点击元素,还有WebElement的.send_keys()输入字符串。
为了进行更多操作,我们现在来学习一下 Selenium的ActionChains 类。首先,导入

from selenium.webdriver.common.action_chains import ActionChains
ac=ActionChain(driver)

模拟鼠标移动

用ActionChain的move_to_element()方法实现ac.move_to_element(driver.find_element(定位元素)).perform()。必须调用perfem()才能执行。

当然除了移动鼠标,还有很多操作,比如按住鼠标不松开click_and_hold,双击double_click,右击context_click,键盘按住补送key_down

冻结界面

有时候鼠标的移动会导致界面的变化,难以查看元素的定位信息,所以需要暂时冻结界面。
打开网页的开发者工具,选择控制(console),输入js代码
setTimeout(function(){debugger}, 5000)
debugger 命令会使浏览器会进入debug状态,界面被冻住,不管怎么点击界面都不会触发事件。而5000表示5000毫秒后,执行debugger命令。

冻住之后需要网站进行运行则点击此处:
在这里插入图片描述

要学习selenium爬虫Python入门,你可以参考以下步骤和资源: 1. 首先,你需要掌握Python基础知识,包括语法、数据类型、变量、条件语句、循环和函数等。你可以参考[1]中提到的Python基础部分进行学习和练习。 2. 掌握Python的库和工具对于爬虫技术也非常重要。在学习selenium爬虫之前,你需要了解Urllib、requests等库的使用。你可以参考中提到的这些内容进行学习。 3. 学习解析技术也是爬虫中的关键一环。你可以学习XPath、JSONPath和beautiful等解析技术,以便从网页中提取所需的数据。同样,你可以参考中提到的相关部分进行学习。 4. 掌握selenium库的使用是进行Web自动化爬虫的关键。你可以通过学习selenium的API文档和示例代码来了解其基本用法。另外,你也可以参考中提到的selenium部分进行学习。 5. 最后,了解Scrapy框架是爬虫进阶的一步。Scrapy是一个强大的Python爬虫框架,可以帮助你更高效地编写和管理爬虫。你可以参考中提到的Scrapy部分进行学习。 总结起来,学习selenium爬虫Python入门可以通过以下步骤进行:掌握Python基础知识 -> 学习Urllib和requests库 -> 学习解析技术(如XPath、JSONPath和beautiful) -> 掌握selenium库的使用 -> 了解Scrapy框架。希望这些信息能对你有所帮助! 引用: : 本套视频教程适合想掌握爬虫技术的学习者,以企业主流版本Python 3.7来讲解,内容包括:Python基础、Urllib、解析(xpath、jsonpath、beautiful)、requests、selenium、Scrapy框架等。针对零基础的同学可以从头学起。<span class="em">1</span> #### 引用[.reference_title] - *1* [零基础Python爬虫入门到精通-视频教程网盘链接提取码下载 .txt](https://download.youkuaiyun.com/download/m0_66047725/81741433)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值