零散常用的方法
from selenium import webdriver # 调用键盘按键操作时需要引入的Keys包 from selenium.webdriver.common.keys import Keys # 调用环境变量指定的PhantomJS浏览器创建浏览器对象 driver = webdriver.PhantomJS() # 如果没有在环境变量指定PhantomJS位置 # driver = webdriver.PhantomJS(executable_path="./phantomjs")) #获取当前页面的url driver.current_url # 页面前进后退 driver.forward() #前进 driver.back() # 后退 #关闭页面 driver.close() 关闭当前页面 driver.quit() 退出整个浏览器 # 获取新的页面快照 driver.save_screenshot("我爱学习.png") # 打印网页渲染后的源代码 print driver.page_source # 获取页面名为 wrapper的id标签的文本内容 data = driver.find_element_by_id("wrapper").text # 打印页面标题 print driver.title # 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)
元素定位
from selenium.webdriver.common.by import By 1.通过id来查找 driver.find_element_by_id('kw') driver.find_element(By.ID,'kw') 2.通过类名来查找 cheeses = driver.find_elements_by_class_name("cheese") cheeses = driver.find_elements(By.CLASS_NAME, "cheese") 3.通过name属性查找 driver.find_elements_by_name("email") driver.find_elements(By.NAME,'email') 4.通过标签名查找 driver.find_elements_by_tag_name('div') driver.find_elements(By.TAG_NAME,'kw') 5.通过xpath 语法查找 driver.find_elements_by_xpath("//div") driver.find_elements(By.XPATH,'//div') 6.通过css选择器选择元素 driver.find_elements_by_css_selector("//div") driver.find_elements(By.CSS_SELECTOR,'//div') find_element 获取第一个满足条件的元素 find_elements 获取所有满足条件的元素
表单元素操作
1.button input[type='submit'] 2.checkbox input[type='checkbox '] 3.select 下拉列表 ----------- input_tag=driver.find_element_by_id('kw') input_tag.send_keys("onion") #填充 input_tag.clear() #清除 ----------- remember_tag = driver.find_element_by_id('rememberME') remember_tag.click() #点击 ------------------- 选择标签: 选择select : select 元素不能直接点击。因为点击后还需要选中元素 <select> </select> # 导入 Select 类 from selenium.webdriver.support.ui import Select # 找到 name 的选项卡 select_tag = Select(driver.find_element_by_name('status')) # select_tag.select_by_index(1) #索引 select_tag.select_by_value("0") #根据value里的值 select_tag.select_by_visible_text("广播") #根据文本内容 select_tag.deselect_all() #取消所有的选中
行为链
有时候页面操作可能需要很多步,可以使用鼠标的行为链来完成
from selenium.webdriver import ActionChains input_tag = driver.find_element_by_id('kw') submit_tag = driver.find_element_by_id('su') actions= ActionChains(driver) action.move_to_element(input_tag) #移动元素 action.send_keys_to_element(input_tag,'onion') action.move_to_element(submit_tag) action.click(submit_tag) action.perform() click_and_hold(element) 点击但不松开鼠标 context_click(element) 右键点击 double_click(element) 双击 # 将 ac1 拖拽到 ac2 位置 ac1 = driver.find_element_by_xpath('elementD') ac2 = driver.find_element_by_xpath('elementE') ActionChains(driver).drag_and_drop(ac1, ac2).perform()
cookie 操作
cookie 操作
1. 获取所有的cookie
for cookie in driver.get_cookies():
print "%s -> %s" % (cookie['name'], cookie['value'])2.删除cookie
# By name
driver.delete_cookie("CookieName")# all
driver.delete_all_cookies()3.根据cookie的key 获取value
value =driver.get_cookie(key)
页面等待
隐式等待是等待特定的时间,显式等待是指定某一条件直到这个条件成立时继续执行
1.隐式等待:在获取不可用元素等待一个确切的时间如果不设置等待时间为0s
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # 隐式等待10s
driver.get("http://www.xxxxx.com/loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")2.显示等待
显式等待是指定某一条件直到这个条件成立时继续执行,也可以在等待的时候设定一个最大时间,如果超出这个时间就会抛出一个异常。
如果不写参数,程序默认会 0.5s 调用一次来查看元素是否已经生成,如果本来元素就是存在的,那么会立即返回。
from selenium import webdriver from selenium.webdriver.common.by import By # WebDriverWait 库,负责循环等待 from selenium.webdriver.support.ui import WebDriverWait # expected_conditions 类,负责条件出发 from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("http://www.xxxxx.com/loading") try: # 页面一直循环,直到 id="myDynamicElement" 出现,最多等待10s element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit()
presence_of_element_located 某个元素已经加载完毕
element_to_be_cliable 某个元素是否可以点击了
页面切换
1.打开一个新的页面
借助js代码来实现打开一个新的页面
driver.execute_script("window.open('"+url+"')")
driver.execute_script("window.open(‘https://www.baidu.com/’)")2.一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下:
driver.switch_to.window("this is window name")
也可以使用 window_handles 方法来获取每个窗口的操作对象。例如:for handle in driver.window_handles:
driver.switch_to.window(handle)
设置代理
selenium 设置代理 不同的浏览器有不同的实现方式
谷歌浏览器如下
def proxy_test(): op = webdriver.ChromeOptions() op.add_argument('--proxy-server=https://222.189.144.104:4245') driver =webdriver.Chrome(options=op) driver.get('http://httpbin.org/ip')
官方文档链接