selenium实战学习--定位元素
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common import exceptions as ex
import lxml
import time
#获取到webdriver路径供调用
driver = webdriver.Chrome(r'C:\Users\DELL\AppData\Local\Google\Chrome\Application\chromedriver.exe')
#设置窗口大小
driver.set_window_size(1280,1000)
#设置全局操作超时时间
driver.implicitly_wait(10)
#通过webdriver访问网站
driver.get('https://kyfw.12306.cn/otn/resources/login.html')
driver.find_element(By.LINK_TEXT, "账号登录").click()
driver.find_element(By.ID, "J-userName").click()
driver.find_element(By.ID, "J-userName").send_keys("*********") #登录名自己用的填充
driver.find_element(By.ID, "J-password").click()
driver.find_element(By.ID, "J-password").send_keys("*******") #登录密码自己用的填充明文
time.sleep(10)#等待30s,利用空隙手动输入验证码
#立即登录按钮有覆盖层,使用enter触发,ljdl.send_keys("\n")实现enter键触发
ljdl = driver.find_element(By.ID, "J-login")
ljdl.send_keys("\n")
print("1")
time.sleep(3)
driver.find_element_by_link_text("车票").click()
driver.find_element(By.LINK_TEXT, "单程").click()
#对StaleElementReferenceException异常的处理
try:
driver.find_element_by_link_text("车票").click()
driver.find_element(By.LINK_TEXT, "单程").click()
except ex.StaleElementReferenceException:
driver.find_element_by_link_text("车票").click()
driver.find_element(By.LINK_TEXT, "单程").click()
#from nanchang
time.sleep(3)
driver.find_element(By.ID, "fromStationText").click()
driver.find_element_by_css_selector( u"[title=ww昌]").click()
# to wuhan
time.sleep(5)
driver.find_element(By.ID, "toStationText").click()
driver.find_element_by_css_selector( u"[title=ee汉]").click()
#date at 18
time.sleep(5)
driver.find_element(By.ID, "train_date").click()
#获取乘车日期的时候,选中日期右键“检查”,进入li 列表 copy selector
driver.find_element_by_css_selector( "body > div.cal-wrap >"
" div.cal.cal-right > div.cal-cm > div:nth-child(16) > div").click()
# choose train type
time.sleep(5)
driver.find_element_by_css_selector("#_ul_station_train_code > li:nth-child(3) > label").click()
time.sleep(5)
while True:
try:
driver.find_element_by_id("query_ticket").click() #click the button
e=driver.find_element_by_id("YZ_5n0000Z12601") #che de xinghao
e.click()
if e.text in [u'无','--']:
print("no Tickets")
time.sleep(2)
else:
print("yes")
driver.find_element_by_link_text("预定").click()
#选择乘车人,列表的第一个和第2个
driver.find_element_by_css_selector("#normal_passenger_id > li:nth-child(1) > label").click()
driver.find_element_by_css_selector("#normal_passenger_id > li:nth-child(2) > label").click()
#提交订单以及确认提交付款
driver.find_element_by_link_text("提交订单").click()
driver.find_element_by_link_text("确认").click()
except:
pass
==============================================遇到的问题集锦====================================================
1、一直报错:unknown error: Element is not clickable at point (580, 47). Other element would receive the click: <label for="stb_1">...</label>
#立即登录按钮有覆盖层,使用enter触发,ljdl.send_keys("\n")实现enter键触发
ljdl = driver.find_element(By.ID, "J-login")
ljdl.send_keys("\n")
参考微博:https://www.cnblogs.com/shengs/p/11203221.html
2、报错:AttributeError: 'list' object has no attribute 'click'
driver.find_elements_by_css_selector("#_ul_station_train_code > li:nth-child(3) > label").click()
查询资料说find_elements_by_css_selector中elements会elements集合,解决办法很简单,那就是去掉s,取单个即可
3、脚本第一次跑正常,第二次报错
解决办法很暴力:关掉重新跑
4、关于find_element_by_css_selector
对于蒙层,就打开蒙层然后右键--检查。获取蒙层list表,copy selector来定位元素,很好用,没有唯一id的时候非常好用
参考别人的写出来,但是自己也在不断修改不断尝试,期待自己的进步,感谢各位大侠的博客,让自己遇到问题不茫然,自学不孤独
本文参考代码:https://blog.csdn.net/github_37216944/article/details/79053781
selenium实战学习--定位元素的更多相关文章
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- selenium+iframe 如何定位元素(实战)
场景: 在同一界面,需定位iframe里面的元素, 就需要切换至Iframe块,然后定位元素,验证完成后,再切换出来. 如果不切换至iframe ,会发现不管采取什么定位,都会报元素不存在.
- selenium的八大定位元素的方式
#八大定位方式 from selenium import webdriver def BrowserOpen(): driver = webdriver.Chrome(); driver.maximi ...
- selenium使用location定位元素坐标偏差
python+selenium+Chromedriver使用location定位元素坐标偏差使用xpath定位元素,用.location获取坐标值,截取网页截图的一部分出现偏差. 之所以会出现这个坐标 ...
- python + selenium 练习篇 - 定位元素的方法
1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8from selenium import webdriverdriver = webdriver.Chrome() ...
- 【Selenium01篇】python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作!
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 二.话不多说,直接开干,开始搭建自动化测试环境 这里以前在 ...
- selenium八种定位元素方法
1.driver.find_element_by_id('su') 定位到元素的id一般id是唯一的,可以精确定位到元素 2.driver.find_element_by_name() 通过元素的na ...
- selenium(3):学习操作元素基本方法
来源:<selenium webdriver基于Python源码案例> 一.打开网页①第一步:从selenium里面导入webdriver模块②打开浏览器(Ie和Chrome对应下面的)③ ...
- selenium实战学习第一课
#-*- coding:utf-8 -*- __author__ = "carry" from selenium import webdriver from selenium.we ...
- Selenium(三)webdriver的API与定位元素
在学习定位元素之前,应该要学会: 1.打开浏览器 2.打开网页 3.定位元素及操作 ①定位元素 可只此输入框的id是kw,name是wd,class是s_ipt ②在python编辑器中找到该元素 通 ...
随机推荐
- 在NodeJS中安装babel
安装babel 打开终端,输入命令:npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node 安装完毕之后 ...
- 活字格性能优化技巧(3):如何巧用CDN提升含页面的访问速度
本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上两篇中我们分享了如何利用数据库主键和表格设置默认不加载数据来提升应用 ...
- 19.13备库duplicate恢复新主库(二)
问题描述:主备两个库不在同一个机房,此时想从这一套库中在复制一套可读可写的新库出来.网络带宽要求比较高,需要从备库中使用备份在起一个新库,也要测试下使用duplicate从备库能够在复制一个新库.经过 ...
- YII文件上传
<span style="font-size:14px;">use yii\web\UploadedFile; public function actionDoarta ...
- MySQL(三)数据目录
目录 Mysql的主要目录结构 1 数据库文件的存放路径 /var/lib/mysql/ 2 相关命令目录 /usr/bin/mysql /usr/sbin/mysql 3 配置文件目录 /usr/s ...
- python函数参数与类参数
python关于函数的一些应用 前言 鉴于python3与python2有些不同,看到某些代码时可能会感到疑惑,就稍微记录一下. 一.不限制个数的函数参数 1.*args 以此为参数,会被python ...
- Runtime类继Robot类自动登录QQ后改进版2.0
自动登录QQ2.0上线!!! 最近呢,有很多人问我自动登录QQ的小程序不够完善.看过我上一篇博客的人都知道,在登录QQ时运行Robot移动鼠标不够严谨,有时候会移动出错.很多小伙伴就会说了," ...
- ARM Cortex-M4|非常好用的一种串口收发方式
在这里分享项目中我经常使用的一种串口收发方式:阻塞发送 + 接收中断 +空闲中断 + 环形队列 项目代码地址:www.baidu.com 一.简介 串口发送使用最简单的阻塞发送方式,一般来说都是接收的 ...
- [C++核心编程] 4.3、类和对象-C++对象模型和this指针
文章目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 4.3 C++ ...
- windows11 下使用 阿里云 modelscope docker 环境 运行参考
昨天看视频 我们做了个能对话的AI派蒙,免费给大家玩! 发现阿里有一个语音转文字的模型(paraformer),之前处理这种需求一直都是直接调用服务商提交好的API接口 突然想尝试一下本地搭建,虽然和 ...