目录
第一节 如何搭建Selenium环境
1.1 Selenium3.0工作原理
工作原理详解:
1.Client端上运行脚本的时候通过Driver和浏览器进行会话
2.进行会话的时候创建一个独一无二的会话Session,创建Session之后就直接和浏览器进行会话
3当浏览器再次收到Client发送的脚本时,浏览器会直接解析这个脚本
4.在浏览器中执行脚本中的相应操作,执行完之后会将这个结果返回给Client端
第二节 环境搭建
1.安装Python,安装包下载后直接安装就行,在安装的时候勾选pip(扩展包的管理工具)
2.安装Selenium,使用pip命令安装
3.安装visual studio code编辑器
4.将浏览器的Driver放置到python的安装目录下边
环境部署好后
1.visual studio code编辑器编写.py文件后在调试窗口输入文件运行的路径就可以
PS D:\zuoting\works\Selenium-Python\seleniumtest> cd .\seleniumtest\
PS D:\zuoting\works\Selenium-Python\seleniumtest> python .\start_browser.py
2.一切准备就绪后运行时报错提示
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 81
说明使用的driver与当前的浏览器版本不对应所以需要下载与当前浏览器对应的版本Driver
第二节 其他
1.注册页面结构分析
通过定位方式中的某种方式无法定位到某个元素时,可以通过Console控制台的document来查找元素
2.使用title_contains检查页面是否正确
print(EC.title_contains("松勤VIP管理系统"))
运行结果:
<selenium.webdriver.support.expected_conditions.title_contains object at 0x03C819B0>
3.使用不能方式定位
常用的元素定位方式有:
driver.find_element_by_id("register_email").send_keys("test01@163.com")
driver.find_element_by_class_name("form-control input-lg").send_keys("test01")
driver.find_element_by_name("password").send_keys("111111")
driver.find_element_by_xpath("//*[@id='captcha_code']").send_keys("111111")
但是会发现
driver.find_element_by_class_name("form-control input-lg").send_keys("test01")
通过以上方式找不到用户名时,可以通过DOM来找,
当使用元素定位方式定位有多个同样的元素,是可以定位到多个元素时,但是操作的时默认的第一个元素,如果可以操作就操作,如果不能操作就不操作
更改为
user_name_element_node = driver.find_elements_by_class_name("controls")[1]
user_element = user_name_element_node.find_element_by_class_name("form-control")
user_element.send_keys("test01")
更改为子父节点定位,一层一层的寻找,找到最终的元素,通过下标找到第二个元素,通过第二个元素再找到子节点,再通过子节点找到另外一个元素
4.使用Expected_conditions判断元素是否可见
打开页面就判断元素是是否可见
locator = (By.CLASS_NAME,"controls")
WebDriverWait(driver,1).until(EC.visibility_of_element_located(locator))
运用定位方式,通过智能等待去找页面元素,通过webdriver方式直接,只需要运用WebDriverWait()方法,将这个方法封装起来,只需要穿一个定位方式的值给它就可以了,它会在规定的时间内去找这个元素,如果找到了就往下运行,如果没有找到就返回fasle
5.输入注册用户名字及获取用户信息
设想的用户信息是否与输入的用户信息一致
email_element = driver.find_element_by_id("register_email")
print(email_element.get_attribute("placeholder"))
email_element.send_keys("test01@163.com")
print(email_element.get_attribute("value"))
get_attribute()方法,获取属性的时候想取得哪个属性的值,就直接跟上哪个值,如果想取得它的文本,但是没有时,默认先给取Value就可以了
6.如何生成用户名
for i in range(5):
user_email = (random.sample('1234567890abcdefg',5)
print(user_email)
如果只是这样的话,生成的就是一个list,并不是想要的字符串效果
for i in range(5):
user_email = ''.join(random.sample('1234567890abcdefg',5)) + "@163.com"
print(user_email)
注册过程中需要不同的用户名,只需要使用random()函数来实现
7.如何解决验证码思路
(1)设置一个万能的验证
(2)登录——使用cookie
(3)识别验证码
拿到验证码——》把这个图片保存下来——》按照图片解析下来
将这个图片进行保存
driver.save_screenshot("E:/zt.png")