Python selenium外掛使用 可刷瀏覽量
阿新 • • 發佈:2018-12-11
常見selenium 程式碼及含義:
Selenium是一個Web的自動化測試工具,最初是為網站自動化測試而開發的,型別像我們玩遊戲用的按鍵精靈,可以按指定的命令自動操作,不同是Selenium 可以直接執行在瀏覽器上,它支援所有主流的瀏覽器(包括PhantomJS這些無介面的瀏覽器)。 Selenium 可以根據我們的指令,讓瀏覽器自動載入頁面,獲取需要的資料,甚至頁面截圖,或者判斷網站上某些動作是否發生。
Selenium 自己不帶瀏覽器,不支援瀏覽器的功能,它需要與第三方瀏覽器結合在一起才能使用。但是我們有時候需要讓它內嵌在程式碼中執行,所以我們可以用一個叫 PhantomJS 的工具代替真實的瀏覽器。
可以從 PyPI 網站下載 Selenium庫https://pypi.python.org/simple/selenium , 也可以用第三方管理器 pip用命令安裝:pip install selenium
Selenium也分為有介面瀏覽器和無介面瀏覽器 快速入門
Selenium 庫裡有個叫 WebDriver 的 API。WebDriver 有點兒像可以載入網站的瀏覽器,但是它也可以像 BeautifulSoup 或者其他 Selector 物件一樣用來查詢頁面元素,與頁面上的元素進行互動 (傳送文字、點選等),以及執行其他動作來執行網路爬蟲。
注意: 我們使用的有介面瀏覽器,它雖然方便我們觀察,但是在實際運用中是非常消耗效能的 我們也可以使用Chrome的無介面瀏覽器,除了沒有瀏覽器介面以外,其它的相關操作都與有介面瀏覽器相同
# 使用selenium來載入動態網頁
# 首先要安裝selenium:pip3 install selinium
# selinium自身不帶瀏覽器驅動,我們要自己下載驅動
from selenium import webdriver
import time
#設定無頭瀏覽器
# options = webdriver.ChromeOptions()
# options.set_headless()
#建立一個瀏覽器的驅動
# driver = webdriver.Chrome(
# executable_path='/home/ljh/桌面/tool/chromedriver',
# options=options
# )
driver = webdriver.Chrome(
executable_path='/home/ljh/桌面/tool/chromedriver',
)
driver.get('http://www.baidu.com')
#儲存螢幕的截圖
# driver.save_screenshot('baidu.png')
#找到百度的輸入框
# driver.find_element_by_id('kw').send_keys('美男子')
# #找到按鈕,模擬點選
# driver.find_element_by_id('su').click()
# time.sleep(2)
#隱式等待
driver.implicitly_wait(5)
#新增顯式等待
#設定迴圈等待
from selenium.webdriver.support.ui import WebDriverWait
#條件(根據條件尋找對應的節點)
from selenium.webdriver.support import expected_conditions as EC
driver_wait = WebDriverWait(driver,20)
driver_wait.until(
# EC.element_to_be_selected(driver.find_element_by_id(''))
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
# #通過連線的文字找對應的標籤
# driver.find_element_by_link_text('下一頁>').click()
# driver.find_element_by_class_name('n').click()
# time.sleep(5)
# #返回前頁面
# driver.back()
# time.sleep(5)
# #前一頁
# driver.forward()
# #關閉當前介面
# driver.close()
#通過page_source直接能夠拿到經過瀏覽器渲染之後的頁面資料
#print(driver.page_source)
# print(driver.get_cookies)
# 獲取cookies值
# cookies = driver.get_cookies()
# for cookie in cookies:
# print(cookie['name']+':'+cookie['value'])
# 拖拽和點選操作
from selenium.webdriver import ActionChains
element = driver.find_element_by_xpath('//div[@id="u1"]/a[1]')
#將滑鼠移動到指定的節點
# ActionChains(driver).move_to_element(element).perform()
#將滑鼠移動到指定的節點並且點選該節點(單擊)
ActionChains(driver).move_to_element(element).click(element).perform()
#將滑鼠移動到指定的節點並且點選該節點(雙擊擊)
ActionChains(driver).move_to_element(element).double_click(element).perform()
##### 在 ac 位置右擊
ActionChains(driver).move_to_element(action).context_click(action).perform()
##### 在 ac 位置左鍵單擊hold住
ActionChains(driver).move_to_element(action).click_and_hold(action).perform()
##### 將 ac1 拖拽到 ac2 位置
ac1 = driver.find_element_by_id("su")
ac2 = driver.find_element_by_class_name('mnav')
ActionChains(driver).drag_and_drop(ac1,ac2).perform()
time.sleep(20)
# #退出瀏覽器
driver.quit()
#selenium的異常處理
from selenium.common.exceptions import TimeoutException,NoSuchElementException
#請求超時,異常處理
try:
driver.get('https://github.com/')
except TimeoutError as err:
print(err)
#找不到節點的異常處理
try:
driver.find_element_by_id('sbcks')
except NoSuchElementException as err:
print(err)
selenium的瀏覽器驅動也可以執行js語句
#####執行JS語句
js = "document.body.scrollTop=10000"
driver.execute_script(js)
刷csdn瀏覽量:
#首席那安裝selinium
from selenium import webdriver
import time
from lxml import etree
import json
#新增顯示等待
from selenium.webdriver.support.ui import WebDriverWait
#根據條件尋找對應節點
from selenium.webdriver.support import expected_conditions as EC
#設定無頭瀏覽器
# options=webdriver.ChromeOptions()
# options.set_headless()
#建立瀏覽器驅動
while True:
driver = webdriver.Chrome(
executable_path='/home/lbc/Documents/chromedriver',
)
# options=options
driver.get('http://www.baidu.com')
#獲取cookie
cookies = driver.get_cookies()
cookie_dict = {}
for cookie in cookies:
cookie_dict[cookie['name']] = cookie['value']
# print(cookie_dict)
#顯示等待
# driver_wait= WebDriverWait(driver,20)
# driver_wait.until(
# )
# driver.save_screenshot('baidu.png')
driver.find_element_by_id('kw').send_keys('小鋼蛋')
#隱式等待
# driver.implicitly_wait(3)
driver.find_element_by_id('su').click()
# driver.find_element_by_xpath('//h3[@class="t"]/a').click()('//div[@id="u1"]/a[1]')
time.sleep(3)
# driver.find_element_by_link_text('下一頁>').click()
# time.sleep(3)
#匯入滑鼠移入
from selenium.webdriver import ActionChains
#用xpath解析並拖拽滑鼠進行點選
element = driver.find_element_by_xpath('//h3[@class="t"]/a[1]')
#將滑鼠移動到指定的節點
ActionChains(driver).move_to_element(element).perform()
#將滑鼠移動到指定的節點並且點選該節點(單擊)
ActionChains(driver).move_to_element(element).click(element).perform()
#返回前頁面
# driver.back()
time.sleep(10)
driver.quit()
# driver.forward()