理一下定位网页元素方法:
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("[email protected]") 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