Selenium 学习笔记(二)

理一下定位网页元素方法:

1. find_element_by_id() : 通过ID属性定位,需要节点包含id ,如<input type="text" placeholder="邮箱/手机/用户名" class="login-input" name="username" id="username">

2. find_element_by_name() : <input type="text" placeholder="邮箱/手机/用户名" class="login-input" name="username" id="username">

3. find_element_by_class_name() :<input type="text" placeholder="邮箱/手机/用户名" class="login-input" name="username" id="username">

4. find_element_by_css_selector() :在网页上选中元素---右键检查---在高亮的html代码中,继续右键,选择copy---copy selector

5. find_element_by_link_text("登录"):察看网页标签对之间文本,<a href="/index.php">登录</a>,必须是a标签,必须有文本

 

上述常见方法得区别:

1. id 和name依赖网页必须存在该元素

2. class_name往往有很多

3. link_text和partial_text(局部文本)只能针对文本A标签

4. css_selector和xpath 基本能定位所有元素

 

 

常见得一些行为:

click() :点击

clear():清空

send_keys() :输入

 

 

接着上次得写。

功能步骤:

1. 输入用户名、密码、确认密码、手机、邮箱,点击 注册 按钮。

2. 点击个人资料,更改个人资料。

下面来自动化它们~

 

 1 from selenium import webdriver
 2 
 3 driver = webdriver.Chrome()
 4 driver.get("http://localhost/")
 5 driver.maximize_window()
 6 
 7 js = 'document.getElementsByClassName("site-nav-right fr")[0].childNodes[3].removeAttribute("target")'
 8 # 注意单双引号
 9 driver.execute_script(js)
10 driver.find_element_by_link_text("注册").click()
11 # find_element_by_ 通过各种方式获取目标节点,click()模拟用户点击
12 
13 # current_tab = driver.current_window_handle
14 # # current_tab 是首页
15 # all_tab = driver.window_handles
16 # for i in all_tab:
17 #     if i == current_tab:
18 #         driver.close()
19 #     else:
20 #         driver.switch_to.window(i)
21 
22 # 填写注册信息
23 driver.find_element_by_name("username").send_keys("眼底有霜")
24 driver.find_element_by_name("password").send_keys("jingmingtian")
25 driver.find_element_by_name("userpassword2").send_keys("jingmingtian")
26 driver.find_element_by_name("mobile_phone").send_keys("18612345678")
27 driver.find_element_by_name("email").send_keys("18612345678@cc.cc")
28 driver.find_element_by_name("email").submit()
29 #driver.find_element_by_class_name("reg_btn").click()
30 
31 # 提交表单操作,可以通过点击按钮 也可以在最后一项末尾添加submit()进行表单提交

 

 

上面写得是注册模块,结果页面是 :

 

 下面用刚刚注册得帐号登录,然后点击账户设置---个人资料,输入个人信息。重点是关于日历模块、单选框模块得处理。

   

 1 import time
 2 from selenium import webdriver
 3 
 4 driver = webdriver.Chrome()
 5 driver.get("http://localhost/index.php")
 6 driver.maximize_window()
 7 driver.implicitly_wait(30)
 8 
 9 # 点击登录按钮,切换窗口,然后输入帐号
10 driver.find_element_by_link_text("登录").click()
11 current_tab = driver.current_window_handle
12 all_tab = driver.window_handles
13 for i in all_tab:
14     if i != current_tab:
15         driver.switch_to.window(i)
16     else:
17         driver.close()
18 
19 driver.find_element_by_name("username").send_keys("眼底有霜")
20 driver.find_element_by_name("password").send_keys("jingmingtian")
21 driver.find_element_by_name("cookie").click()
22 driver.find_element_by_class_name("login_btn").click()
23 
24 driver.find_element_by_link_text("账号设置").click()
25 driver.find_element_by_link_text("个人资料").click()
26 
27 
28 driver.find_element_by_id("true_name").send_keys("消愁")
29 xb = driver.find_elements_by_id("xb")
30 xb[1].click()
31 # find_elements 记得是带S得,获取节点下所以元素,结果是数组形式
32 
33 # 日历模块,查看源码发现,带有readonly 属性,无法直接写入,而通过日历模块选择太麻烦,所以先清除该属性
34 js = 'document.getElementById("date").removeAttribute("readonly")'
35 driver.execute_script(js)
36 
37 driver.find_element_by_id("date").send_keys("2000-01-01")
38 driver.find_element_by_id("qq").send_keys("1111111")
39 driver.find_element_by_class_name("btn4").click()
40 
41 # 提交表单后,会生成浏览器弹窗
42 time.sleep(3)
43 # time这块,输入后,字体下方会提示红线,证明当前找不到这个方法,需要导入。
44 # 直接按快捷键  Alt + Enter 快捷导入
45 driver._switch_to.alert.accept()
46 
47 # 弹窗有accept() 和dismiss()

 

 

 

下次写添加商品、寄送地址以及点击购物车进行结算。

--- 2017-09-08  11:44:55

 

原文地址:https://www.cnblogs.com/good-time/p/7477839.html