600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python selenium 下拉框 页面变化_selenium + python 处理 select 标签下拉框的选项

python selenium 下拉框 页面变化_selenium + python 处理 select 标签下拉框的选项

时间:2023-03-10 20:43:18

相关推荐

python selenium 下拉框 页面变化_selenium + python 处理 select 标签下拉框的选项

1. 背景

在爬取网页是,有时候我们会遇到下图中的下拉框,也就是 < select > < /select > 标签。按照一般的点击方案是无法成功的,而 selenium 提供了专门的 Select 类来处理这种下拉框。

如下图:

2. select 下拉框的处理方案

上图中的网页源代码如下:

全部分类

Kindle商店

MP3 音乐

Prime Video

图书

婴儿用品

工艺品

汽车

电子产品

美容和个人护理

计算机

女士时尚

男士时尚

女童时尚

男童时尚

健康和家居用品

宠物用品

家居厨房用品

工业科技

工具与家居装饰

影视

玩具与游戏

行李箱包

视频游戏

软件

运动与户外用品

销售和优惠

音乐、CD和乙烯基塑料唱片

可以看一下 selenium 源代码中 select.py 文件的实现:…\selenium\webdriver\support\select.py

2.1. 第一种方案:select_by_value

使用条件:用于选取 < option> 标签的 value 值,要求必须要有 value 属性,当然,这不是废话嘛…。

from selenium import webdriver

from mon.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from mon.action_chains import ActionChains

from mon.keys import Keys

from selenium.webdriver.support.ui import Select

import random

import time

browser = webdriver.Chrome()

browser.get("/")

# 选中最后一个选项

# 音乐、CD和乙烯基塑料唱片

classSelectValue = 'search-alias=music-intl-ship'

Select(browser.find_element_by_tag_name("select")).select_by_value(classSelectValue)

# 拿到搜索框

input = browser.find_element_by_xpath("//form[@name='site-search']/div[@class='nav-fill']//input[@class='nav-input']")

# 输入搜索关键字

time.sleep(random.randrange(1, 5, 1))

input.clear()

input.send_keys('CD')

# 敲enter键

input.send_keys(Keys.RETURN)

3.2. 第二种方案:select_by_index

使用条件:要求下拉框的选项必须要有index 属性,例如 index=”1”。注意,这不是数组下标值,而是属性值!

# 稍微变一下,这种方法在这不合适,仅仅是mark一下

Select(browser.find_element_by_tag_name("select")).select_by_index(2)

3.3. 第三种方案:select_by_visible_text

使用条件:用于选取 < option> 标签的 text 值!

# Toys & Games

# 一定要注意是源代码中的text值,而不要从页面去复制,区别就在于,英文界面下的源代码中会有&amp

classSelectText = '软件'

Select(browser.find_element_by_tag_name("select")).select_by_visible_text(classSelectText )

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。