# 使用无界面模式
# chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')
# self.brower = webdriver.Chrome(r'/home/aea/chromedriver',chrome_options=chrome_options)
# 使用有界面模式
self.brower = webdriver.Chrome(r'/home/aea/chromedriver')
# 使用 phantomjs
# self.brower = webdriver.PhantomJS(phantomjs_path)
self.username = 'your name'
self.password = 'your password'
def isElementExist(self,id):
self.brower.find_element_by_id(id)
return True
except:
return False
def auto_run(self):
print("开始自动化操作...")
start_time = time.time()
self.brower.get("https://services.police.govt.nz/vetting")
while True:
is_login = self.isElementExist('logon')
if is_login:
break
username_input = self.brower.find_element_by_id('logon:username:input')
password_input = self.brower.find_element_by_id('logon:password:input')
username_input.send_keys(self.username)
password_input.send_keys(self.password)
self.brower.find_element_by_id('logon:logon').click()
time.sleep(1)
self.brower.get("https://services.police.govt.nz/vetting")
while True:
agencyRow_list = self.brower.find_elements_by_class_name("agencyRow")
if len(agencyRow_list) != 0:
break
while True:
Open_Agency = self.brower.find_element_by_xpath(r'//span[text()="Open Agency"]').is_displayed()
if Open_Agency:
time.sleep(1)
break
self.brower.find_element_by_xpath(r'//span[text()="Open Agency"]').click()
while True:
success_list = self.brower.find_elements_by_class_name("alert-success")
if len(success_list) != 0:
break
# 先判断元素是否存在
while True:
Submit_Request_list = self.brower.find_elements_by_xpath(r'//a[text()="Submit Request"]')
print(Submit_Request_list)
if len(Submit_Request_list) != 0:
break
while True:
Submit_Request = self.brower.find_element_by_xpath(r'//a[text()="Submit Request"]').is_displayed()
print(Submit_Request)
if Submit_Request:
break
time.sleep(1)
self.brower.find_element_by_xpath(r'//a[text()="Submit Request"]').click()
# 判断id为questionsAnswers的元素是否存在
while True:
is_Answers = self.isElementExist('questionsAnswers')
if is_Answers:
break
# 判断 bodyContainer 元素是否隐藏,直到不隐藏才会继续处理
while True:
is_bodyContainer = self.brower.find_element_by_id('bodyContainer').is_displayed()
# print(is_bodyContainer)
if is_bodyContainer:
break
# 判断 questionsAnswers 元素是否隐藏,直到不隐藏才会继续处理
while True:
is_questionsAnswers = self.brower.find_element_by_id('questionsAnswers').is_displayed()
# print(is_questionsAnswers)
if is_questionsAnswers:
break
# 判断 predefinedRoles 元素是否隐藏,直到不隐藏才会继续处理
while True:
is_predefinedRoles = self.brower.find_element_by_id('predefinedRoles').is_displayed()
print(is_predefinedRoles)
if is_predefinedRoles:
break
self.brower.find_element_by_xpath(r'//span[text()="Caregiving - children and youth"]').click()
# 判断页面是否加载完毕,是否存在元素 //div[@id="question1"] 直到元素存在,开始继续往下执行
while True:
question1_list = self.brower.find_elements_by_xpath(r'//div[@id="question1"]')
print(question1_list)
if len(question1_list) != 0:
break
# 当元素 //div[@id="question1"] 加载进来之后,再来判断元素是否被隐藏,如果没有继续往下执行,否则继续等待
while True:
is_question1 = self.brower.find_element_by_xpath(r'//div[@id="question1"]').is_displayed()
print(is_question1)
if is_question1:
break
self.brower.find_element_by_xpath(r'//strong[text()="Yes"]').click()
self.brower.find_element_by_xpath(r'//div[@id="question1"]//a[text()="NEXT "]').click()
while True:
is_question2 = self.brower.find_element_by_xpath(r'//div[@id="question2"]').is_displayed()
print(is_question2)
if is_question2:
break
self.brower.find_element_by_xpath(r'//strong[text()="Paid"]').click()
self.brower.find_element_by_xpath(r'//div[@id="question2"]//a[text()="NEXT "]').click()
while True:
is_question3 = self.brower.find_element_by_xpath(r'//div[@id="question3"]').is_displayed()
print(is_question3)
if is_question3:
break
self.brower.find_element_by_xpath(r'//strong[text()="Optional Police Vet"]').click()
self.brower.find_element_by_xpath(r'//div[@id="question3"]//a[text()="NEXT "]').click()
time.sleep(1)
print(self.brower.current_url)
# 先判断最终的表单是否存在
while True:
requestFormContainer_list = self.brower.find_elements_by_xpath(r'//div[@id="requestFormContainer"]')
print(requestFormContainer_list)
if len(requestFormContainer_list) != 0:
break
# 判断最终的表单 display是否为block
while True:
is_requestFormContainer = self.brower.find_element_by_id('requestFormContainer').is_displayed()
print(is_requestFormContainer)
if is_requestFormContainer:
break
choose_list = self.brower.find_elements_by_xpath(r'//span[text()="Choose One"]')
other_list = self.brower.find_elements_by_xpath(r'//option[text()="Other"]')
print(choose_list,other_list)
choose_list[0].click()
other_list[0].click()
choose_list[1].click()
other_list[1].click()
self.brower.quit()
print('结束,花费时间(s):',time.time() - start_time)
new_driver = MyAutoDriver()
new_driver.auto_run()
1、安装好你的seleniumpip install selenium2、看代码,注意我这里是一个真实项目用到的,实际过程中需要自己先定位元素from selenium import webdriverimport time, datetimeclass MyAutoDriver(object): def __init__(self): # 使用无界面模式 ...
from
selenium
import webdriver
# 打开
浏览器
browser = webdriver.Chrome() # Chrome()为Chorm
浏览器
,Ie()为ie
浏览器
# browser.maximize_window() # 设置
浏览器
大小:全屏
browser.minimize_window() # 最小化
浏览器
,适用Chrome,其它未测试。
browser.get("https://www.csdn.net/"
selenium
+
python
点击
display
:none
元素
解决方法汇总
以下方法,我的问题是用第三种方法解决的,希望对你有所帮助
<div>
<div class="login_btn" style="background: url("/static/images_login/btn_sig
1、对于前端隐藏
元素
,一直是
selenium
自动化定位
元素
的隐形杀手,脚本跑到隐藏
元素
时
位置
时
报各种各样的错误,可是这种隐藏的下拉菜单又没有办法避免,所以非常头痛,此帖只为交流隐藏
元素
自动化定位处理方法;
处理一:html这种格式的:
处理
操作
:
from
selenium
impo
selenium
selenium
可以模拟真实
浏览器
,自动化测试工具,支持多种
浏览器
。结合谷歌驱动,实现爬取数据。
谷歌驱动下载地址:http://npm.taobao.org/mirrors/chromedriver/
在谷歌
浏览器
上输入chrome://version/,可以看到自己谷歌对应的版本,并下载对应的谷歌驱动
对应版本的84.0.4147对应上即可,后面的只是这个版本修复的次数。
设置谷歌驱动参数
option = webdriver.ChromeOptions()
option.add_
from
selenium
.webdriver.support import expected_conditions as EC
def check_element_exists(driver,element,condition):
if condition=='class':
driver.find_element_by_class_name(element)
面试题:
selenium
中隐藏
元素
如何定位?这个是很多面试官喜欢问的一个题,如果单纯的定位的话,隐藏
元素
和普通不隐藏
元素
定位没啥区别,用正常定位方法就行了
但是吧~~~很多面试官自己都搞不清楚啥叫定位,啥叫
操作
元素
(如click,clear,send_keys)
隐藏
元素
如下图有个输入框和一个登录的按钮,本来是显示的
元素
的属性隐藏和显示,主要是 type="hidden"和style=...
可以使用
selenium
.webdriver提供的方法来判断
元素
是否存在,具体步骤如下:
1. 使用find_elements_by_xxx()方法查找
元素
,如果找到了
元素
,则返回一个列表,列表中包含所有符合条件的
元素
;如果没有找到
元素
,则返回一个空列表。
2. 判断返回的列表是否为空,如果为空,则说明
元素
不存在
;如果不为空,则说明
元素
存在。
示例代码如下:
```
python
from
selenium
import webdriver
# 创建
浏览器
对象
browser = webdriver.Chrome()
# 打开网页
browser.get('http://www.example.com')
# 查找
元素
elements = browser.find_elements_by_xpath('//div[@class="example"]')
# 判断
元素
是否存在
if elements:
print('
元素
存在')
else:
print('
元素
不存在
')
# 关闭
浏览器
browser.quit()