使用Selenium+Python进行百度的登陆登出

记一次Selenium+Python的登陆登出

第一次学习这个Selenium,使用Python实现百度的登陆和登出

Selenium定位元素的普通方法

1.id定位方法(必须拥有id属性值):find_element_by_id(“id值”)
2. name定位方法(必须拥有name属性值):find_element_by_name(“name值”)
3. class name定位方法(必须有class属性):find_element_by_class_name(“class值”)
4. tag name定位方法:(用来匹配标签,如<input><a><button>等,该标签在当前页面为唯一元素,或者为符合条件的第一个元素):find_element_by_tag_name(“标签名”)
5. link text定为方法(只能匹配a标签,必须匹配全部文本) :find_element_by_link_text(“全部文本值”)
6. partial link text(只能匹配a标签,为link text的模糊匹配,匹配值在页面的标签中有唯一标识):
find_element_by_partial_link_text(“局部文本”)

通过xpath定位元素

Xpath的定位(方法统一为:find_element_by_xpath()):
1.以绝对路径定位,如/html/body/div[1]/div[1]/div/div[3]/a[3],该路径为定位百度首页中,a标签地图的绝对路径
2.以相对路径定位,如//[@id=“kw”],该路径为定位百度首页中,搜索框的相对路径
3.层级与属性定位,如//span/input[@id=‘kw’]或//
[@id=‘kw’]定位百度首页的搜索框元素
4.属性与逻辑定位,如//[@id=‘kw’ and @name=‘wd’]定位为百度首页的搜索框元素
5.文本内容为xx的元素,如//
[text()=‘新闻’],定位的是百度首页的a标签新闻。
(在新闻这里测试了登录,发现提示元素无法交互,查看源码发现//[text()=‘登录’]有两个匹配项)
6.属性以xxx开头的元素,如//
[starts-with(@name,‘tj_trn’)]定位的是百度首页的标签a新闻
7.属性包含xxx的元素,如//*[contains(@name,‘news’)]定位的是百度首页的标签a的新闻

通过CSS选择器定位元素

CSS定位(方法同一位find_element_by_css_selector()):
1.ID选择器,如#kw,定位百度首页的搜索框
2.class选择器,如.s_ipt,定位百度首页的搜索框
3.元素选择器,如input,定位所有input标签元素
4.属性选择器,如input[id=‘kw’],定位百度首页的搜索框
5.层级选择器,如span>input,定位百度首页的搜索框
6.属性以xxx开头的元素,如[name^=‘tj_trn’],定位百度首页中的新闻标签
7.属性以xxx结束的元素,如a[name$=‘p’],定位百度首页中a标签的属性name以p结尾的元素地图
8.属性中包含xxx的元素,如a[name*=‘2’],定位百度首页中a标签的属性name包含2的元素hao123

Python+Selenium实现百度登陆登出

相应的注释在代码中

from selenium import webdriver
from selenium.webdriver import ActionChains
import time

def loginbaidu(url,username,password):
        driver.maximize_window()
        driver.get(url)
        time.sleep(3)
        #点击id为ul的a标签的第七个
        driver.find_element_by_xpath('//*[@id="u1"]/a[7]').click()
        #由于这个登录口是div浮动窗口,需要一些等到时间让其加载完成
        time.sleep(3)
        #点击用户名密码登陆
        driver.find_element_by_xpath("//*[@class='tang-pass-footerBar']/p[@id='TANGRAM__PSP_10__footerULoginBtn']").click()
        time.sleep(3)
        #清除账号栏,并输入账号
        driver.find_element_by_css_selector("#TANGRAM__PSP_10__userName").clear()
        driver.find_element_by_css_selector("#TANGRAM__PSP_10__userName").send_keys(username)
        #清除密码栏,并输入密码
        driver.find_element_by_css_selector("#TANGRAM__PSP_10__password").clear()
        driver.find_element_by_css_selector("#TANGRAM__PSP_10__password").send_keys(password)
        #判断checkbox(下次自动登录)是否选中,被选中则点击取消
        nextlogin = driver.find_element_by_css_selector("#TANGRAM__PSP_10__memberPass").is_selected()
        if nextlogin :
                driver.find_element_by_css_selector("#TANGRAM__PSP_10__memberPass").click()
        #点击登陆按钮
        driver.find_element_by_css_selector("#TANGRAM__PSP_10__submit").click()
        time.sleep(5)
        #发送手机验证码,并手动输入
        driver.find_element_by_xpath("//*[@id='TANGRAM__39__button_send_mobile']").click()
        time.sleep(30)
        '''
        #选择邮箱发送验证码
        driver.find_element_by_xpath("//*[@id='TANGRAM__39__content_select_show']").click()
        driver.find_element_by_xpath("//*[@id='TANGRAM__39__select_email']").click()
        driver.find_element_by_xpath("//*[@id='TANGRAM__39__button_send_email']").click()
        time.sleep(30)
        '''
        #点击提交,登录成功
        driver.find_element_by_xpath("//*[@id='TANGRAM__39__button_submit']").click()
        time.sleep(5)

def singout() :
        ActionChains(driver).move_to_element(driver.find_element_by_xpath('//*[@id="u_sp"]/a[7]/span')).perform()
        time.sleep(3)
        driver.find_element_by_link_text("退出").click()
        time.sleep(3)
        driver.find_element_by_xpath("//div[@class='button-wrap']/a[@class='s-btn btn-ok']").click()
        time.sleep(3)

if __name__ == "__main__":
        url = "http://www.baidu.com"
        username = input("请输入登录账号:")
        password = input("请输入密码:")
        driver = webdriver.Firefox()
        print("登录账号")
        loginbaidu(url,username,password)
        print("退出账号")
        singout()
        driver.quit()
        print("脚本运行完成")

总结

第一次使用这个Python+Selenium,有很多东西不足,总的来说还算不错,就是在登录窗口那里有点堵了,主要是需要一些时间等待div窗口弹出,加载完成,才能进行元素定位操作。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值