Python使用Selenium模拟浏览器输入和鼠标点击
Posted 小斌哥ge
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python使用Selenium模拟浏览器输入和鼠标点击相关的知识,希望对你有一定的参考价值。
Python使用Selenium模拟浏览器输入和鼠标点击
Selenium库有很多功能,它可以帮我们模拟浏览器输入内容和鼠标点击.本文介绍实现的步骤和方法,并给出最易出现的BUG的解决办法
一、安装Selenium
pip install Selenium
二、下载chromedriver.exe
需要下载与浏览器版本对应的chromedriver.exe到代码所在目录下,
下载地址:http://chromedriver.storage.googleapis.com/index.html
(注意:运行代码时如果没有下载与自己的浏览器版本匹配的chromedriver.exe放到代码同级目录下,
会报错:selenium.common.exceptions.WebDriverException: Message: chromedriver executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home)
三、编写代码实现模拟浏览器
参考代码:以登录淘宝网首页为例,在搜索栏输入搜索内容,点击“搜索”按钮,(网站加载需要时间,根据网速等),然后在提示扫码登录的界面点击“账号密码登录”(换了页面,还是可以点击和输入),具体代码说明见注释
from selenium import webdriver
import time
# 声明浏览器
browser = webdriver.Chrome()
try:
# get打开指定的url,传入要打开的url,以淘宝网为例
browser.get(https://www.taobao.com/)
# 通过find_element_by_name获取到网页标签,send_keys()输入内容,在搜索栏输入python
browser.find_element_by_name(q).send_keys(python)
time.sleep(1)
通过find_element_by_class_name获取到网页标签,click()点击
注意class名中的空格是表示父子级的关系,如果有空格,则class_name只取最后一段,然后还要避免有同名的class,不要取错了
为了避免取错标签,优先根据id或name等其他方式取
如:淘宝网的搜索按钮class name为btn-search tb-bg,用btn-search tb-bg取时报错,用tb-bg取则成功
# browser.find_element_by_class_name(btn-search tb-bg).click() # 报错
browser.find_element_by_class_name(tb-bg).click() # 成功
time.sleep(5)
# 点击"密码登录"按钮
# browser.find_element_by_class_name(forget-pwd J_Quick2Static).click() # 报错
browser.find_element_by_class_name(J_Quick2Static).click() # 正常
time.sleep(10)
browser.close()
except Exception as e:
print("模拟登录失败:".format(e))
browser.close()
BUG描述:
使用webdriver声明浏览器后,打开网页,然后使用find_element_by_class_name(class_name)选择html标签时,报错:
Message: invalid selector: Compound class names not permitted
消息:无效选择器:不允许使用复合类名
原因分析:
我们通过F12从浏览器获取到的html元素的class name中间有空格,所以提示我们类名不合法,不允许的类名
解决方法:
1.html元素的class name中间的空格是表示父级和子级的关系,我们调用以上方法的时候使用类名的最后一段就可以了
如:<button type="submit" class="btn-search tb-bg">
我们通过find_element_by_class_name(btn-search tb-bg)选择button标签,就会报错
改成find_element_by_class_name(tb-bg)就可以选择到需要的button标签(btn-search和tb-bg中间有空格),但是要确认tb-bg不是被很多个标签重复使用的类名,能确保选择到自己要选的那个标签
2.webdriver有很多方法,使用其他方法:
find_element_by_id(),find_element_by_name(),find_element_by_css_selector()等,如果需要选择的html标签有id,优先通过id选择,或者通过name等,除非这个标签只有class时,再使用上面的方法(换种思路).
以上是关于Python使用Selenium模拟浏览器输入和鼠标点击的主要内容,如果未能解决你的问题,请参考以下文章