Selenium

一、什么Selenium

Selenium是一个用于Web应用程序测试的工具,它可以模拟真实浏览器,自动化测试工具,支持多种浏览器,也可以作爬虫,主要用来解决JavaScript渲染问题。

支持的浏览器包括IE, Firefox, Chrome, PhantomJS等,这里特别说一下PhantomJS,它是一个无头浏览器(没有图形界面),但是它可以像普通的浏览器一样输入文字,点击按钮,执行js代码等

二、Selenium基本使用

实例化浏览器对象
from  selenium import webdriver

browser = webdriver.PhantomJS()  
# 或者
browser = webdriver.Chrome()
使用selenium访问页面
from  selenium import webdriver

browser = webdriver.PhantomJS()  
browser.get("http://www.baidu.com")
print(browser.page_source)
browser.close()

执行上面这部份代码会打印百度首页的源代码,如果使用的是Chrome()或者其他浏览器,首先他会打开浏览器并访问百度首页,然后控制台打印源代码,最后关闭浏览器。需要注意的是,Chrome和Firefox都需要装一个叫driver的东西(Chrome的叫chromedriver,firefox的叫geckodriver),下载后把他们加到环境变量中就可以了。

元素查找
单个元素
通过css选择器
e1 = browser.find_element_by_id("xxx")
e2 = browser.find_element_by_css_selector(".ooo")
# 通过xpath
e3 = browser.find_element_by_xpath('/xxxx/ooo')

查找器返回的是WebElement对象

常用的元素查找方法

find_element_by_name
find_element_by_id
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

使用By模块查找

from  selenium import webdriver
from selenium.webdriver.common.by import By

browser = webdriver.PhantomJS()  
browser.get("http://www.baidu.com")

input_kw = browser.get_element(By.ID, "kw")
print(input_kw)
browser.close()

多个元素查找
# 就是把element换成elements,返回的是列表
li = browser.find_elements_by_css_selector('li')
将页面截图保存
browser.save_screenshot("xxx.jpg")
交互操作
input_kw = browser.get_element(By.ID, "kw")
# 往input框输入
input_kw.send_keys("python")
# input_kw.clear() 清除输入框
button = browser.get_element(By.ID, "su")
# 点击按钮
button.click()
# 结果在browser中可以查看

将多个操作串行执行

from selenium import webdriver
from selenium.webdriver import ActionChains

browser = webdriver.Chrome()

url = "http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable"
browser.get(url)
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
# 将source元素拖动到target元素上
actions.drag_and_drop(source, target)
# 执行
actions.perform()

执行JavaScript

browser.execute_script('alert("hello world")')

获取内容


source = browser.find_element_by_css_selector('#draggable')
# 获取属性
print(source.get_attribute('class'))
# 获取文本
print(source.text)
# 获取id
print(source.id)
# 位置
print(source.location)
# 标签名
print(source.tag_name)

切换选项卡

有时候点击一个链接后会打开一个新的选项卡

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
browser.execute_script('window.open()')
print(browser.window_handles)
# 切换到第2个选项卡
browser.switch_to_window(browser.window_handles[1])
browser.get('https://www.taobao.com')

前进与后退

import time
from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com')
browser.get('//www.greatytc.com')
browser.back()
browser.forward()

cookie操作

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
print(browser.get_cookies())
browser.add_cookie({'xxx': 'ooo'})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())

还有很多操作,可以在官方文档中查找

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容