前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python使用Selenium模拟浏览器输入内容和鼠标点击

Python使用Selenium模拟浏览器输入内容和鼠标点击

作者头像
Python碎片公众号
发布2021-02-26 14:24:36
4.6K0
发布2021-02-26 14:24:36
举报
文章被收录于专栏:Python碎片公众号的专栏

Selenium库是一套Web自动化测试工具,有很多功能,它可以帮我们模拟在浏览器输入内容和模拟鼠标点击浏览器按钮.

本文介绍Python调用Selenium实现模拟浏览器输入和点击的步骤和方法,并给出最易出现的BUG的解决办法

一、安装Selenium

代码语言:javascript
复制
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)

三、编写代码实现模拟浏览器

本文以登录淘宝网首页为例,在搜索栏输入搜索内容,点击“搜索”按钮,(网站加载需要时间,受网速等影响),加载完成后会进入授权登录页面

在提示扫码登录的界面,点击“账号密码登录”(换了页面,还是可以继续点击和输入内容),具体代码解释见注释

代码语言:javascript
复制
from selenium import webdriver
import time
 
 
# 声明浏览器(这里用chrome浏览器)
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()

上面的代码声明一个Chrome浏览器,通过browser对象获取浏览器标签进行输入内容和点击,sleep()模拟浏览器加载的过程

按照上面的步骤配置webdriver和编写代码即可以实现Selenium的demo.

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中间的空格是表示父级和子级的关系,我们调用以上方法时,使用类名的最后一段就可以了

如选择html标签: <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属性时,再使用class的方法(换种思路),就可以避免以上问题了.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 碎片 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档