Python selenium 后台运行模拟登录操作(三)

之前使用的是浏览器打开登录,现在测试在后台运行浏览器,对于爬取数据的话就没必要显示浏览器了。


之前使用浏览器打开:

chromedriver = 'D:/Python35/selenium/webdriver/chromedriver.exe'
driver = webdriver.Chrome(executable_path=chromedriver)

现使用 PhantomJS 运行:

chromedriver = 'D:/Python35/mypy/phantomjs/bin/phantomjs.exe'
driver = webdriver.PhantomJS(chromedriver)

phantomjs 下载地址: http://phantomjs.org/download.html

phantomjs 下载解压即可,驱动直接引用,如:

driver = webdriver.PhantomJS('D:/Python35/mypy/phantomjs/bin/phantomjs.exe')

本次测试不考虑验证码的情况,可输入准确的登录账户密码,需要一次性成功方法。还是以百度为例。

但有可能自己的账户密码输入错误的情况,所以还是判断一下吧。默认情况下,下图红框中的提示信息是为空的,若出现错误,则提示。



当点击登录之后,判断是否错误,没有错误才进行接下来的页面跳转等操作。老方法查看提示信息的标签,获取其文本。

errtext = driver.find_element_by_id('TANGRAM__PSP_3__error').text.strip()
if len(errtext)!=0:
    print("登录失败:%s" % errtext)
else:
    print("登录成功")

成功登录后,不要急着操作,得等待登陆后的页面加载完成。因此加个 while 循环每隔一秒通过地址判断是否登录成功(也可能服务器有问题跳转到其他页面,可以获取状态码判断,此处没有)

while True:
    if loginurl == driver.current_url :
        time.sleep(1)
        continue
    else:
        break

为了确认是否操作成功,测试时可以在保存当前页面图片下来。

driver.get_screenshot_as_file(screenImg)

最终脚本,只是基础操作:

#-*- coding: utf-8 -*-
# python 3.5.0

import time
from selenium import webdriver  

username = "kk"
password = "kk"

#chromedriver = 'D:/Python35/selenium/webdriver/chromedriver.exe'
chromedriver = 'D:/Python35/mypy/phantomjs/bin/phantomjs.exe'
loginurl = 'https://passport.baidu.com/v2/?login' 
screenImg = "D:/Python35/selenium/webdriver/screenImg.png"

#打开浏览器  
#driver = webdriver.Chrome(executable_path=chromedriver)

#后台打开(phantomjs下载:http://phantomjs.org/download.html)
print(">> getting chromedriver ……")
driver = webdriver.PhantomJS(chromedriver)

#options = webdriver.ChromeOptions()

print(">> initialize page ……")
driver.set_page_load_timeout(20)
driver.get(loginurl)

assert "登录百度帐号" in driver.title

#数据账号&密码,登录
print(">> setting username & password")
driver.find_element_by_id("TANGRAM__PSP_3__userName").send_keys(username)
driver.find_element_by_id("TANGRAM__PSP_3__password").send_keys(password)
driver.find_element_by_id("TANGRAM__PSP_3__submit").click()


#登录时是否提示错误信息(初期登录错误只提示,但仍不需要验证码)
print(">> login ……")
errtext = driver.find_element_by_id('TANGRAM__PSP_3__error').text.strip()
if len(errtext)!=0:
    driver.quit()
    print("login failed:%s" % errtext)
    print(">> haved quitted!")
else:
    #登录后加载完新的页面才能继续下一步
    print(">> loading new page……")
    while True:
        if loginurl == driver.current_url :
            time.sleep(1)
            continue
        else:
            break

    #获取当前新页面地址
    print(driver.current_url)
    
    #获取cookie
    #print(driver.get_cookies())
    
    #cookieList = driver.get_cookies()
    #for dicts in cookieList:
    #    for key in dicts:
    #        print("'%s' = '%s'" % (key,dicts[key]))
            
    #当前页面截图
    driver.get_screenshot_as_file(screenImg)
    
    print(">> quit after 5 seconds ……")
    time.sleep(5)
    driver.quit()
    print(">> haved quitted!")



  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python Selenium是一个用于自动化浏览器操作的工具它可以模拟用户在浏览器中的行为,例如点击、输入、提交表单等。AJAX(Asynchronous and XML)是一种用于在后台与服务器进行异步通信的技术,它可以在不刷新整个页面的情况下更新部分页面内容。 在Python中使用Selenium和AJAX结合起来,可以实现对动态网页的自动化操作。当网页使用AJAX技术加载内容时,传统的网页解析方法可能无法获取到完整的页面内容。而使用Selenium可以模拟用户的操作,等待AJAX请求完成后再进行页面解析,从而获取到完整的页面内容。 以下是使用Python Selenium和AJAX的基本步骤: 1. 安装Selenium库:可以使用pip命令进行安装,如:pip install selenium。 2. 下载浏览器驱动:Selenium需要与特定浏览器相对应的驱动程序才能正常工作,例如Chrome需要下载ChromeDriver。 3. 导入Selenium库:在Python脚本中导入Selenium库。 4. 创建浏览器对象:使用Selenium提供的WebDriver类创建一个浏览器对象,例如Chrome浏览器对象。 5. 打开网页:使用浏览器对象的get()方法打开目标网页。 6. 等待AJAX请求完成:使用Selenium提供的等待方法,等待页面中的AJAX请求完成。 7. 解析页面内容:使用Selenium提供的方法获取页面中的元素,并进行相应的操作。 使用Python Selenium和AJAX可以实现很多功能,例如自动化测试、数据爬取等。希望以上介绍对你有帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值