• 页面加载等待

一. 隐式等待

Selenium 没有在 DOM 中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常。

from selenium import webdriver

browser = webdriver.Chrome()

# 设置 隐式等待
browser.implicitly_wait (10)
browser.get(’https://www.zhihu.com/explore\' )
input = browser.find_element_by_class_name(’zu-top-add-question’)

print(input) 

二 . 显式等待

方法一: time.sleep(5)

方法二:

指定要查找的节点,然后指定最长等待时间 如果在规定时间内加载出来了这个节点,就返回查找的节点,

如果到了规定时间依然没有加载该节点, 则抛出超时异常。

用 plicitly_wait()方法实现了隐式等待(默认时间为0):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


browser = webdriver.Chrome()
browser.get(’https://www.taobao.com/’)

# 显式等待方法一
# time.sleep(10)

# 显式等待-方法二
wait = WebDriverWait(browser, 10)
input = wait.until(EC.presence_of_element_located( (By . ID,’q’))) 
button = wait.until(EC.element to be clickable((By.CSS_SELECTOR,’ .btn search\')))

print(input, button)

 

  • 输入文字/清空文字/点击按钮

\"\"

  • 执行 的操作

对于某些操作, Selenium API 并没有提供。 比如下拉进度条,它可以直接模拟运行 JavaScrapt,

此时使用 execute ()方法即可实现 -- 将进度条下拉到最底部,代码如下:

from selenium import webdriver

browser= webdriver .Chrome()
browser. get (’ https://www.zhihu.com/explore\')

# 执行 JS下拉操作
browser .execute_ (\'window.scrollTo(o, document.body .scrollHeight)’)
browser .execute_ ( \'alert(”To Bottom”)\') 

 

  • 动作链

还有另外一些操作,它们没有特 定的执行对象,比如鼠标拖曳 键盘按键等,这些动作用另一种方式来执行,那就是动作链.

比如,现在实现 个节点的拖曳操作,将某个节点从一处拖曳到另外一处:

from selenium import webdnver
from selenium.webdriver import ActionChains

browser = webdri ver. Chrome()
url =’ http://www.runoob com/try/try.php?filename=jqueryui i-droppable\'
browser.get(url)
browser.switch_ to .   (\' i frar est此')
source = browser. ind element by_css selector(\'#draggable \' )
target= browser.find_element_by_css_selector(\'#droppable \' )

# 动作链 - 拖拽操作
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions. perform() 
#_*_coding: utf-8_*_
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from selenium.webdriver.common.alert import Alert
browser=webdriver.Chrome()
url=\"http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable\"
browser.get(url)
#切换到目标元素所在的 
browser.switch_to. (\" Result\")
#确定拖拽目标的起点
source=browser.find_element_by_id(\"draggable\")
#确定拖拽目标的终点
target=browser.find_element_by_id(\"droppable\")
#形成动作链
actions=ActionChains(browser)
actions.drag_and_drop(source,target)
#执行
actions.perform()
\'\'\'
1.先用switch_to_alert()方法切换到alert弹出框上
2.可以用text方法获取弹出的文本 信息
3.accept()点击确认按钮
4.dismiss()相当于点右上角x,取消弹出框
\'\'\'
t=browser.switch_to_alert()
print(t.text)
t.accept()
time.sleep(10)
browser.close()

 

  • 使用Selenium + PhantomJS时报“\'phantomjs.exe\' executable needs to be in PATH.”

1. 添加 phantomjs 到环境变量

2. 或在代码中指定 phantomjs 的位置

from selenium import webdriver

driver = webdriver.PhantomJS(executable_path=\'/usr/local/share/phantomjs-2.1.1-windows\\bin\\phantomjs.exe\')
  • cookies的处理

# -*- coding: utf-8 -*-
from selenium import webdriver
import time

browser=webdriver.Chrome()
browser.get(\"https://www.zhihu.com/explore\")
print(browser.get_cookies())
browser.add_cookie({\"name\":\"name\",\"domain\":\"www.zhihu.com\",\"value\":\"germey\"})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
browser.close()

 

 

 

 

收藏 打印