selenium:打开多界面,操作句柄,控制页滑动,正则表达式,操作输入框和按钮,定位复合elements

有个比较有趣的网站,需要执行两个步骤:

切换到other商品页面

筛价,即输入价格区间

emmm,没有前后顺序要求,这个网站也比较神奇

上代码在解释

# -*- coding:utf-8 -*-
import re
from selenium import webdriver

driver_path = r'E:\Tools\cd\chromedriver.exe'

chrome_options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path=driver_path)
driver.get("https://saudi.souq.com/sa-en/dental-care/70-1781-sar/a-cp/l/?ref=nav&page=1")
driver.maximize_window()

# 获取网页源码
source = driver.page_source
# print(source)

# 在源码中匹配other商品链接,这里用的re,也可以用xpath
url = re.search('value="(.*?other.*)"', source).group(1).strip()
# print(url)

# selenium打开新页面,即other商品页面
js = " window.open('{}')".format(url)  # 可以看到是打开新的标签页 不是窗口
driver.execute_script(js)

# 获取当前已打开的页面的所有句柄(两个页面,一个是全部商品页面,一个other商品页面)
all_handles = driver.window_handles
# 当前句柄在全部商品页面,切换到other商品页面
driver.switch_to.window(all_handles[1])

for h in all_handles:
    print(h)

# 控制页面下拉200元素
js = "var q=document.documentElement.scrollTop=200"
driver.execute_script(js)

# 获取最低价格输入框
min_price_input = driver.find_element_by_class_name('valueStart')
# 清除输入框内原有数据
min_price_input.clear()
# 传入新数据
min_price_input.send_keys('80')

# 获取最高价输入框
max_price_input = driver.find_element_by_class_name('valueEnd')
max_price_input.clear()
max_price_input.send_keys('1000')

# 应用价格按钮
apply_btn = driver.find_element_by_css_selector('[class="sk-bg-clr1 sk-bg-clr1-eff blue-button button tiny range-slider'
                                                '-apply"]')
apply_btn.click()

代码不多,但是有趣的地方不少:

首先,selenium定位不到other这个button,也许定位到了,点击不生效,或者不跳转:

严格来说,它是一个input,但是,勾选上会自动跳转,selenium未跳转不知道为什么。

开发者模式可以看见,它其实是一个url链接:

 

思路就有了,用re在page_source直接拿这个链接,新开页面。

打开新页面就是句柄的操作。

在后续操作中,获取到输入框要清理掉里面原有的数据。

定位button时,要用css选择器,因为class是复合型的,也就是class属性中间有空格。

最后就没有什么需要注意的了。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值