selinum + firefox 豆瓣 登录

Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS,Chrome这些无界面的浏览器)。

Selenium 可以根据我们的指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生。

Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。但是我们有时候需要让它内嵌在代码中运行,所以我们可以用一个叫 PhantomJS 的工具代替真实的浏览器。

可以从 PyPI 网站下载 Selenium库https://pypi.python.org/simpl…
也可以用 第三方管理器 pip用命令安装(windows 环境):pip install selenium
Selenium 官方参考文档:http://selenium-python.readth…

火狐浏览器 geckdriver 下载地址:https://github.com/mozilla/geckodriver/releases
如果是 chromedriver 参见:https://segmentfault.com/a/1190000013940356

导入 webdriver
from selenium import webdriver

要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys

#设置路径
#driver = webdriver.Firefox(executable_path="C:\Python36\geckodriver.exe") 

#创建firefox 参数
opt = webdriver.FirefoxOptions()
#创建无界面对象
driver = webdriver.Firefox(options=opt)

这里提到 切换fram

很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug也可以看到,就是定位不到,这种情况很有可能是frame在搞鬼(原因之一,改天专门说说定位不到元素,可能的一些原因及处理办法)。

frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作。

driver.switch_to_frame() 这个方法也许以后不用了
一般写成 driver.swith_to.frame(‘frame的id’)

查找完成后记得用
driver.switch_to.default_content()
退出 不然会出错

get方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择 time.sleep(2)

driver.get(“http://www.baidu.com/”)

主要是获取页面find_ 找元素

获取页面名为 wrapper的id标签的文本内容

data = driver.find_element_by_id(“wrapper”).text

打印数据内容

print data

打印页面标题 “百度一下,你就知道”

print driver.title

生成当前页面快照并保存

driver.save_screenshot(“baidu.png”)

id=“kw"是百度搜索输入框,输入字符串"长城”

driver.find_element_by_id(“kw”).send_keys(u"长城")

id="su"是百度搜索按钮,click() 是模拟点击

driver.find_element_by_id(“su”).click()

获取新的页面快照

driver.save_screenshot(“长城.png”)

获取当前页面Cookie

print driver.get_cookies()

ctrl+a 全选输入框内容

driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘a’)

ctrl+x 剪切输入框内容

driver.find_element_by_id(“kw”).send_keys(Keys.CONTROL,‘x’)

输入框重新输入内容

driver.find_element_by_id(“kw”).send_keys(“itcast”)

模拟Enter回车键

driver.find_element_by_id(“su”).send_keys(Keys.RETURN)

清除输入框内容

driver.find_element_by_id(“kw”).clear()

打印网页渲染后的源代码

print driver.page_source

获取当前url

print driver.current_url

关闭当前页面,如果只有一个页面,会关闭浏览器

driver.close()

关闭浏览器

driver.quit()

Selenium 的 WebDriver提供了各种方法来寻找元素,假设下面有一个表单输入框:

获取id标签值

element = driver.find_element_by_id(“passwd-id”)

获取name标签值

element = driver.find_element_by_name(“user-name”)

获取标签名值

element = driver.find_elements_by_tag_name(“input”)

也可以通过XPath来匹配

element = driver.find_element_by_xpath("//input[@id=‘passwd-id’]")

模拟豆瓣登录

#!/usr/bin/env python
# -*- coding:UTF-8 -*-    

'''
@version: v2.7.13 
@author: dongzh 
@license: Apache Licence  
@contact: 986042572@qq.com 
@site: http://blog.csdn.net/hqzxsc2006 
@software: PyCharm Community Edition 
# @FileName: baidu.py.py
# @Time    : 2018/9/20 14:29
'''

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys

def test():

    url = "https://www.douban.com/"
    # 创建firefox 参数
    opt = webdriver.FirefoxOptions()

    #设置成无界面
    opt.set_headless()

    #创建无界面对象
    driver = webdriver.Firefox(options=opt)

    driver.get(url=url)
    #查找 id为form_email的id 并输入
    driver.find_element_by_id("form_email").send_keys(用户名)
    driver.find_element_by_id("form_password").send_keys(密码)
    #找到验证码保存
    driver.save_screenshot('运行中.png')
    code = input('请输入验证码:')
    #查找后输入验证码
    driver.find_element_by_id('captcha_field').send_keys(code)
    #找到按钮点击
    driver.find_element_by_class_name("bn-submit").click()

    time.sleep(3)
    driver.save_screenshot('豆瓣登录完成.png')
    #打印渲染过的源代码
    #print(driver.page_source)
    #driver.save_screenshot("豆瓣.png")



test()



你可能感兴趣的:(selinum + firefox 豆瓣 登录)