<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Selenium是一個Web的自動化測試工具,最初是為網站自動化測試而開發的,Selenium 可以直接執行在瀏覽器上,它支援所有主流的瀏覽器(包括PhantomJS這些無介面的瀏覽器(2018年開發者說暫停開發,chromedriver也可以實現同樣的功能)),可以接收指令,讓瀏覽器自動載入頁面,獲取需要的資料,甚至頁面截圖。
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
這裡用的谷歌瀏覽器
http://npm.taobao.org/mirrors/chromedriver/
檢視自己的瀏覽器版本下載對應的驅動。
把解壓後的驅動放在自己的python.exe 目錄下。
我之前寫過3個範例
https://www.jb51.net/article/236004.htm
是否開啟無頭模式(即是否需要介面)
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options option = Options() # 範例化option物件 option.add_argument("--headless") # 給option物件新增無頭引數 option.headless = True #這種方式也可以 if __name__ == '__main__': web = Chrome(executable_path='D:PyProjectspidervenvScriptschromedriver.exe',options=option) # 指定驅動位置,否則從python直譯器目錄下查詢. web.get("https://baidu.com") print(web.title)
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options option = Options() # 範例化option物件 option.add_argument("--headless") # 給option物件新增無頭引數 if __name__ == '__main__': web = Chrome() web.maximize_window() # 瀏覽器視窗最大化 web.get("https://baidu.com") print(web.title) web.save_screenshot('baidu.png') # 儲存當前網頁的截圖 儲存到當前資料夾下 web.close() # 關閉當前網頁
from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options option = Options() # 範例化option物件 option.add_argument("--headless") # 給option物件新增無頭引數 if __name__ == '__main__': web = Chrome() web.maximize_window() # 瀏覽器視窗最大化 web.get("https://baidu.com") el = web.find_element_by_id('kw') el.send_keys('Harris-H') btn = web.find_element_by_id('su') btn.click() # web.close() # 關閉當前網頁
貌似現在百度可以識別出selenium,還需要圖片驗證。
# 找到文字值為百度一下的節點 driver.find_element_by_link_text("百度一下") # 根據連結包含的文字獲取元素列表,模糊匹配 driver.find_elements_by_partial_link_text("度一下")
ele.text # 獲取當前節點的文字 ele.get_attribute("data-click") # 獲取到屬性對應的value
print(driver.page_source) # 列印網頁的原始碼 print(driver.get_cookies()) # 列印出網頁的cookie print(driver.current_url) # 列印出當前網頁的url
driver.close() # 關閉當前網頁 driver.quit() # 直接關閉瀏覽器
from selenium.webdriver import Chrome import time if __name__ == '__main__': driver = Chrome() driver.get( "https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=78000241_12_hao_pg&wd=selenium%20js%E6%BB%91%E5%8A%A8&fenlei=256&rsv_pq=8215ec3a00127601&rsv_t=a763fm%2F7SHtPeSVYKeWnxKwKBisdp%2FBe8pVsIapxTsrlUnas7%2F7Hoo6FnDp6WsslfyiRc3iKxP2s&rqlang=cn&rsv_enter=1&rsv_dl=tb&rsv_sug3=31&rsv_sug1=17&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=9266&rsv_sug4=9770") # 1.捲動到網頁底部 js = "document.documentElement.scrollTop=1000" # 執行js driver.execute_script(js) time.sleep(2) # 捲動到頂部 js = "document.documentElement.scrollTop=0" driver.execute_script(js) # 執行js time.sleep(2) driver.close()
options = webdriver.ChromeOptions() options.add_argument("--proxy-server=http://110.52.235.176:9999") # 新增代理 options.add_argument("--headless") # 無頭模式 options.add_argument("--lang=en-US") # 網頁顯示英語 prefs = {"profile.managed_default_content_settings.images": 2, 'permissions.default.stylesheet': 2} # 禁止渲染 options.add_experimental_option("prefs", prefs) driver = webdriver.Chrome(executable_path="D:ProgramAppchromedriverchromedriver73.exe",chrome_options=options) driver.get("http://httpbin.org/ip")
""" 目標:滑動驗證碼 1.定位按鈕 2.按住滾軸 3.滑動按鈕 """ import time from selenium import webdriver if __name__ == '__main__': chrome_obj = webdriver.Chrome() chrome_obj.get('https://www.helloweba.net/demo/2017/unlock/') # 1.定位滑動按鈕 click_obj = chrome_obj.find_element_by_xpath('//div[@class="bar1 bar"]/div[@class="slide-to-unlock-handle"]') # 2.按住 # 建立一個動作鏈物件,引數就是瀏覽器物件 action_obj = webdriver.ActionChains(chrome_obj) # 點選並且按住,引數就是定位的按鈕 action_obj.click_and_hold(click_obj) # 得到它的寬高 size_ = click_obj.size width_ = 298 - size_['width'] # 滑框的寬度 減去 滾軸的 寬度 就是 向x軸移動的距離(向右) print(width_) # 3.定位滑動座標 action_obj.move_by_offset(298-width_, 0).perform() # 4.鬆開滑動 action_obj.release() time.sleep(6) chrome_obj.quit()
有時候視窗中有很多子tab頁面。這時候肯定是需要進行切換的。selenium提供了一個叫做switch_to_window來進行切換,具體切換到哪個頁面,可以從driver.window_handles中找到
from selenium import webdriver if __name__ == '__main__': driver = webdriver.Chrome() driver.get("https://www.baidu.com/") driver.implicitly_wait(2) driver.execute_script("window.open('https://www.douban.com/')") driver.switch_to.window(driver.window_handles[1]) print(driver.page_source)
第二個範例
if __name__ == '__main__': from selenium import webdriver import time driver = webdriver.Chrome() start_url = 'https://www.baidu.com' start_url_1 = 'https://www.csdn.net' driver.get(start_url) time.sleep(5) """通過執行js程式碼,開啟瀏覽器視窗,存取地址""" js = 'window.open("{}")'.format(start_url_1) driver.execute_script(js) time.sleep(5) """獲取瀏覽器所有視窗:注意點:視窗的切換是通過下標控制的""" win = driver.window_handles # 執行切換 driver.switch_to.window(win[0]) time.sleep(2) driver.switch_to.window(win[1]) time.sleep(2) driver.switch_to.window(win[0]) time.sleep(2) driver.switch_to.window(win[1]) # 瀏覽器視窗的關閉 driver.close() # 退出瀏覽器 driver.quit()
有時候網頁會內嵌另一個html。一般稱為iframe
from selenium import webdriver driver = webdriver.Chrome() start_url = 'https://mail.163.com/' driver.get(start_url) """定位不成功,在有的情況是因為有頁面的巢狀導致的 在一個html原始碼中有多個html頁面,範例:一個html巢狀一個html 以上:又稱之為iframe的巢狀 """ # 定位巢狀位置iframe el_iframe = driver.find_elements_by_tag_name('iframe') # 執行iframe的切換 driver.switch_to.frame(el_iframe[0]) # 標籤定位 driver.find_element_by_name('email').send_keys('郵箱賬號') driver.find_element_by_name('password').send_keys('你的郵箱密碼') driver.find_element_by_id('dologin').click()
# 1.獲取所有的cookie: for cookie in driver.get_cookies(): print(cookie) # 2.根據cookie的key獲取value: value = driver.get_cookie(key) # 3.刪除所有的cookie: driver.delete_all_cookies() # 4.刪除某個cookie: driver.delete_cookie(key) # 新增cookie: driver.add_cookie({"name":"password","value":"111111"})
這裡模擬登入我們學校教務處。
from selenium.webdriver import Chrome if __name__ == '__main__': web = Chrome() web.get('http://bkjx.wust.edu.cn/') username = web.find_element_by_id('userAccount') username.send_keys('xxxxxxx') # 這裡填自己的學號 password = web.find_element_by_id('userPassword') password.send_keys('xxxxxxx') # 這裡填自己的密碼 btn = web.find_element_by_xpath('//*[@id="ul1"]/li[4]/button') btn.click() # do something
因為沒有滾軸啥的驗證,所以就很簡單qwq。然後後面進行自己的操作即可。
from selenium import webdriver import time options = webdriver.ChromeOptions() options.add_argument('--proxy-server=http://ip地址') # 代理IP:埠號 # ${chromedriver_path}: chromedriver驅動存放路徑 driver = webdriver.Chrome(options=options) driver.get("https://dev.kdlapi.com/testproxy") # 獲取頁面內容 print(driver.page_source) # 延遲3秒後關閉當前視窗,如果是最後一個視窗則退出 time.sleep(3) driver.close()
from selenium import webdriver import time agent = 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1' options = webdriver.ChromeOptions() options.add_argument('--user-agent=' + agent) # ${chromedriver_path}: chromedriver驅動存放路徑 driver = webdriver.Chrome(options=options) driver.get("https://www.baidu.com") # 獲取頁面內容 print(driver.page_source) # 延遲3秒後關閉當前視窗,如果是最後一個視窗則退出 time.sleep(3)
if __name__ == '__main__': from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome() import time start_url = 'https://lceda.cn/' driver.get(start_url) # 定位到需要懸停的標籤 move = driver.find_element_by_xpath('//*[@id="headerNav"]/li[1]/a/span') # //*[@id="headerNav"]/li[1]/a/span # 懸停之後需要點選的標籤 a = driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/div[1]/div[3]/div[1]/a[2]') # //*[@id="headerNav"]/li[1]/div/a[2] # /html/body/div[1]/div[2]/div[1]/div[1]/div[1]/div/div/div[1]/ul/li[1]/div/a[2] # 懸停點選執行 # 建立事件物件 actions = ActionChains(driver) time.sleep(1) # 記錄操作 actions.move_to_element(move) time.sleep(1.5) # 懸停的點選 actions.click(a) time.sleep(1) # 開始執行事件 actions.perform()
selenium
能夠執行頁面上的js,對於js渲染的資料和模擬登陸處理起來非常容易。
selenium
由於在獲取頁面的過程中會傳送很多請求,所以效率非常低,所以在很多時候需要酌情使用。
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45