selenium学习
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
browser = webdriver.Chrome()
#声明浏览器对象为谷歌浏览器
try:
browser.get('https://www.baidu.com')
#以百度为例用get方法请求网页
input = browser.find_element_by_id('kw')
#查找节点
input.send_keys('Python')
#在节点输入文字Python
input.send_keys(Keys.ENTER)
#搜素
wait = WebDriverWait(browser,10)
#设定等待方法为显示等待,等待时间10s
wait.until(EC.presence_of_element_located((By.ID,'content_left')))
#等待条件为presence_of_element_located,即节点出现
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)
#输出结果
finally:
browser.close()
selenium获取节点的方法
find_element(s)_by_id
find_element(s)_by_name
find_element(s)_by_xpath
find_element(s)_by_link_text
find_element(s)_by_partial_link_text
find_element(s)_by_tag_name
find_element(s)_by_class_name
find_element(s)_by_css_selector
Selenium的通用方法是find _element(查找方式by,值)。比如find element_by_id(id)等价于find_element(By.ID,id)
find_element()用于查找单个节点,find_elements用于查找多个节点
节点交互
send_keys()输入搜素内容
clear()清空文字
click()点击按钮
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get('https://www.taobao.com')
input = browser.find_element_by_id('q')
input.send_keys('iPhone')
time.sleep(1)
input.clear()
input.send_keys('iPad')
button = browser.find_element_by_class_name('btn-search')
button.click()
动作链
......#省略赋值及引用模块部分
actions = ActionChains(browser)
#声明ActionChains()对象赋值给actions
actions.drag_and_drop(A,B)
actiaons.perform()
#实现从A到B拖拽操作
其他要点
- execute_script()方法可以实现进度条下拉到最底部,模拟运行JS
- page_source属性可以获取网页源代码
- get_attribute()方法可以获取节点属性.例:print(A.get_attribute(‘B’))
- text属性是获取每个WebElement节点的文本信息,相当于bs4的get_text()方法,pyquery的text()方法
- id属性,获取节点ID
- location属性,获取该节点在页面中的相对位置
- tag_name属性,获取标签名称
- size属性,获取节点大小
- switch_to.frame()和switch_to.parent_frame()方法,切换Frame
- browser.implicitly_wait(10)方法,设定隐式等待
- back()和forward()方法,访问前进和后退
- browser.add_cookie()和browser.delete_all_cookies()方法,增删cookies
- switch_to_window()方法切换选项卡