-
selenium是一种web应用程序测试工具,可以模仿用户的操作
用于爬虫:主要用于解决JavaScript的渲染问题
selenium的安装:http://blog.csdn.net/qq_29186489/article/details/78581249 -
控制Chrome浏览器访问百度,搜索百度,获取搜索结果
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 import time #创建browser对象 browser=webdriver.Chrome() try: #访问网址 browser.get('https//www.baidu.com') #获取搜索框 input=browser.find_element_by_id('kw') #输入要搜索的值 input.send_keys('python') #输入回车指令开始搜索 input.send_keys(Keys.ENTER) #等待页面加载完成 wait=WebDriverWait(browser,10) wait.until(EC.presence_of_element_located(By.ID,"content_left")) #输出获得的页面 print(browser.page_source) finally: #关闭浏览器 browser.close()
-
查找元素的三种方式
input=browser.find_element_by_id('q') input=browser.find_element_by_css_selector('#q') input=browser.find_element(By.ID,'q')
-
元素的交互动作
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(10) #清空clear input.clear() input.send_keys("iPad") button=browser.find_element_by_class_name("btn-search") #点击click button.click() time.sleep(10) browser.close()
-
获取元素的属性
from selenium import webdriver browser=webdriver.Chrome() url="https://www.zhihu.com/explore" browser.get(url) logo=browser.find_element_by_id("zh-top-link-logo") #获取类名 print(logo.get_attribute("class")) #获取文本 print(logo.text) print(logo) #获取id print(logo.id) #获取位置 print(logo.location) #获取标签名 print(logo.tag_name) #获取大小 print(logo.size) browser.close()
-
等待
#隐式等待 browser.implicitly_wait(10) #显式等待 wait=browser.WebDriverWait(browser,10)
-
浏览器的前进和后退
browser.back() browser.forward()
-
无头访问
创建browser前加入以下代码chrome_options=Options() chrome_options.add_argument('--enable-logging') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') browser=webdriver.Chrome(chrome_options=chrome_options)
-
当打开多个窗口时,多个窗口之间的切换
# 获取当前窗口handle name current_window = driver.current_window_handle # 获取所有窗口handle name all_windows = driver.window_handles # 切换window,如果window不是当前window,则切换到该window for window in all_windows: if window != current_window: if window != current_window: driver.switch_to.window(window)driver.switch_to.window(window) # 关闭新窗口后切回原窗口,在这里不切回原窗口,是无法操作原窗口元素 driver.close() driver.switch_to.window(current_window)
-
alert操作
# 1.通过switch_to.alert切换到alert a1 = driver.switch_to.alert a1.accept()#alert确认 #2.直接实例化alert对象 a1 = Alert(driver) a1.dismiss() # alert“取消”
操作 | 效果 |
---|---|
Alert(driver).accept() | 等同于点击确认 |
Alert(driver).dismiss() | 等同于点击取消 |
Alert(driver).authenticate(username,password) | 验证,针对需要身份验证的alert,目前还没有找到特别合适的示例页面 |
Alert(driver).send_keys(keysToSend) | 发送文本,对有提交需求的prompt框 |
Alert(driver).text | 获取alert文本内容,对有信息显示的alert框 |