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 selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.ui import Select

import random

import time

browser = webdriver.Chrome()

browser.get("https://www.amazom.com/")

# 选中最后一个选项

# 音乐、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 )

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值