日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

请求库-selenium 模块

發布時間:2024/6/30 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 请求库-selenium 模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# -*- coding: utf-8 -*-# 安裝:pip3 install selenium# 下載chromdriver.exe放到python安裝路徑的scripts目錄中即可,注意最新版本是3.5 # 國內鏡像網站地址:http://npm.taobao.org/mirrors/chromedriver/3.5 # 最新的版本去官網找:https://sites.google.com/a/chromium.org/chromedriver/downloads# 驗證安裝 from selenium import webdriver # driver = webdriver.Chrome() #彈出瀏覽器 # driver.get("https://www.baidu.com") #瀏覽器自動訪問該url # print(driver.page_source) #終端打印獲取到的urltext文件# 安裝:pip3 install selenium # 下載phantomjs,解壓后把phantomjs.exe所在的bin目錄放到環境變量 # 下載鏈接:http://phantomjs.org/download.html# drivers = webdriver.PhantomJS(executable_path=r"E:\python\phantomjs-2.1.1-windows\bin\phantomjs.exe") #無界面瀏覽器
# 環境變量配置之后就可以不用加里面的參數,但是不知道什么原因pycharm識別不了,只能手動吧目錄填寫進去
# drivers.get('https://www.baidu.com') # print(drivers.page_source)# 基本使用 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #查找方式:ID,class from selenium.webdriver.common.keys import Keys #鍵盤操作,enter 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") #訪問這個頁面input_tag = browser.find_element_by_id("kw") #找到搜索框IDinput_tag.send_keys("極致誘惑") #給搜索框添加搜索條件input_tag.send_keys(Keys.ENTER) #模仿人手動敲擊回車鍵wait = WebDriverWait(browser,10) #等待10秒wait.until(EC.presence_of_element_located((By.ID,"content_left--"))) #等待十秒,知道等到content_left--加載出來,print("browser.page_source",browser.page_source)print("browser.current_url",browser.current_url)print("browser.get_cookie()",browser.get_cookie)finally:browser.close() #最后得關閉

?

from selenium import webdriver from selenium.webdriver import ActionChains 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 timedriver = webdriver.Chrome() driver.get("https://www.baidu.com") wait = WebDriverWait(driver,5)try:# ===============所有方法===================# 1、find_element_by_id# 2、find_element_by_link_text# 3、find_element_by_partial_link_text# 4、find_element_by_tag_name# 5、find_element_by_class_name# 6、find_element_by_name# 7、find_element_by_css_selector# 8、find_element_by_xpath################################################################ 1、find_element_by_id# print(driver.find_element_by_id("kw"))# 2、find_element_by_link_text# login = driver.find_elements_by_link_text("登錄")[0]# login.click()# 3、find_element_by_partial_link_textlogin = driver.find_elements_by_partial_link_text("")[0]login.click()# 4、find_element_by_tag_name# print(driver.find_element_by_tag_name("a"))# 5、find_element_by_class_namebutton=wait.until(EC.element_to_be_clickable((By.CLASS_NAME,'tang-pass-footerBarULogin')))button.click()print("============")# 6、find_element_by_nameinput_user = wait.until(EC.presence_of_element_located((By.NAME,"userName")))input_pwd = wait.until(EC.presence_of_element_located((By.NAME,"password")))commit = wait.until(EC.element_to_be_clickable((By.ID,"TANGRAM__PSP_10__submit")))input_user.send_keys("xxxxxxxxx") #輸入框輸入用戶名input_pwd.send_keys("xxxxxxxxx") #密碼框輸入密碼 commit.click()time.sleep(4)finally:driver.close() 自動登錄百度賬號 from selenium import webdriver from selenium.webdriver import ActionChains 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 timedriver = webdriver.Chrome() driver.get('https://doc.scrapy.org/en/latest/_static/selectors-sample1.html') driver.implicitly_wait(3) #有些文件加載比較緩慢,在加載之前等待try:driver.find_element_by_xpath("//a") #從根目錄下找子子孫孫,找不到報錯# driver.find_element_by_xpath("//body/a") #從根目錄body先找他的兒子,找不到爆粗driver.find_element_by_xpath("//body//a") #從body下的子子孫孫找a,res1 = driver.find_element_by_xpath("//body//a[3]") # 取第一個a標簽,標簽按1開始print(res1.text)r2 = driver.find_element_by_xpath("//a[3]")print(r2.text)r3 = driver.find_element_by_xpath('//*[@id="images"]/a[3]')print(r3.text)# r1,r2,r3 的結果是相同的res4 = driver.find_elements_by_xpath("/html/body/div/a")[3]print(res4.text)res5 = driver.find_element_by_xpath('//a[img/@src="image3_thumb.jpg"]')print(res5.text)finally:driver.close() xpath的基本使用 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR 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() browser.get("https://www.amazon.cn") wait = WebDriverWait(browser,10) wait.until(EC.presence_of_all_elements_located((By.ID,"cc-lm-tcgShowImgContainer"))) tag = browser.find_element(By.CSS_SELECTOR,"#cc-lm-tcgShowImgContainer img") print(tag.get_attribute("src")) print(tag.id) print(tag.location) print(tag.tag_name) print(tag.size) browser.close() 獲取標簽屬性 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By # 按照什么方式查找,By.ID,By.CSS_SELECTOR 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 driver = webdriver.Chrome() driver.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') # wait = WebDriverWait(driver,3) driver.implicitly_wait(3) try:driver.switch_to.frame("iframeResult")drop = driver.find_element_by_id("droppable") #不懂drag = driver.find_element_by_id("draggable") ## 移動方塊# 方式一:# actions = ActionChains(driver) #拿到動作連對象# actions.drag_and_drop(drop,drag)# actions.perform()# time.sleep(4)# 方式二 ActionChains(driver).click_and_hold(drag).perform()distance = drop.location["x"] - drag.location["x"] #獲取到兩者之間的距離track = 0while track < distance:ActionChains(driver).move_by_offset(xoffset=2,yoffset=0).perform()track +=2ActionChains(driver).release().perform()time.sleep(10) finally:driver.close() actionchains

?

等待元素加載 #1、selenium只是模擬瀏覽器的行為,而瀏覽器解析頁面是需要時間的(執行css,js),一些元素可能需要過一段時間才能加載出來,為了保證能查找到元素,必須等待#2、等待的方式分兩種: 隱式等待:在browser.get('xxx')前就設置,針對所有元素有效 顯式等待:在browser.get('xxx')之后設置,只針對某個元素有效 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR 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()#隱式等待:在查找所有元素時,如果尚未被加載,則等10秒 browser.implicitly_wait(10)browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw') input_tag.send_keys('美女') input_tag.send_keys(Keys.ENTER)contents=browser.find_element_by_id('content_left') #沒有等待環節而直接查找,找不到則會報錯 print(contents)browser.close() 隱式等待 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR 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() browser.get('https://www.baidu.com')input_tag=browser.find_element_by_id('kw') input_tag.send_keys('美女') input_tag.send_keys(Keys.ENTER)#顯式等待:顯式地等待某個元素被加載 wait=WebDriverWait(browser,10) wait.until(EC.presence_of_element_located((By.ID,'content_left')))contents=browser.find_element(By.CSS_SELECTOR,'#content_left') print(contents)browser.close() 顯示等待 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR 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() browser.get("https://www.taobao.com/") wait = WebDriverWait(browser,10) # input_tag = browser.find_element_by_id("q") # input_tag.send_keys("情趣用品") # button = browser.find_element_by_class_name("btn-search") # button.click() input_tag = wait.until(EC.presence_of_element_located((By.ID,"q"))) input_tag.send_keys("情趣用品") button = wait.until(EC.presence_of_element_located((By.CLASS_NAME,"btn-search"))) button.click()import time time.sleep(3) input_tag = browser.find_element_by_id("q") input_tag.clear() input_tag.send_keys("iphone9") button = browser.find_element_by_class_name("btn-search") button.click() 自動搜索,二次跳轉 from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素try:browser = webdriver.Chrome()browser.get("https://www.baidu.com")browser.execute_script("alert(6666)")import timetime.sleep(3) finally:browser.close() 手動寫js from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素#frame相當于一個單獨的網頁,在父frame里是無法直接查看到子frame的元素的,必須switch_to_frame切到該frame下,才能進一步查找 try:browser = webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')browser.switch_to.frame("iframeResult")tag1 = browser.find_element_by_id("droppable")print(tag1)browser.switch_to.parent_frame()tag2 = browser.find_element_by_id("textareaCode")print(tag2) finally:browser.close()# 先切換到iframe里找標簽,然后切換到父母版中找標簽 iframe切換問題 import time from selenium import webdriver browser = webdriver.Chrome() browser.get("https://www.baidu.com") browser.get("https://www.taobao.com") browser.get("https://www.sina.com.cn/")browser.back() #后退 time.sleep(12) browser.forward() # 前進 time.sleep(12) browser.close()# 訪問順序;首先訪問百度,淘寶,新浪,然后返回淘寶,12秒后前進到新浪,12秒后關閉瀏覽器 模擬瀏覽器前進后退 #cookies # from selenium import webdriver # # browser=webdriver.Chrome() # browser.get('https://www.zhihu.com/explore') # print(browser.get_cookies()) # browser.add_cookie({'k1':'xxx','k2':'yyy'}) # print(browser.get_cookies()) # # # browser.delete_all_cookies() cookie操作 import time from selenium import webdriver browser = webdriver.Chrome() browser.get("https://www.baidu.com") browser.execute_script("window.open()") print(browser.window_handles) browser.switch_to.window(browser.window_handles[1]) browser.get("https://www.taobao.com") time.sleep(10) browser.switch_to.window(browser.window_handles[0]) browser.get("https://www.sina.com.cn") browser.close() # 先訪問百度頁面,然后打開新的選項卡,跳轉到新的選項卡,訪問淘寶,10秒后跳轉到第一個選項卡,訪問新浪,關閉 選項卡切換操作 from selenium import webdriver from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameExceptiontry:browser=webdriver.Chrome()browser.get('http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')browser.switch_to.frame('iframssseResult')except TimeoutException as e:print(e) except NoSuchFrameException as e:print(e) finally:browser.close() 異常處理
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素 import timedef get_good(driver):try:goods = driver.find_elements_by_class_name("gl-item")for good in goods: # 循環著一夜的的數據detail_url = good.find_element_by_tag_name("a").get_attribute("href") #商品詳情detail_price = good.find_element_by_css_selector(".p-price i").text #商品價格detail_name = good.find_element_by_css_selector(".p-name em").text #商品名detail_com = good.find_element_by_css_selector(".p-commit a").text #評論量msg = """商品名:%s詳情鏈接:%s商品價格:%s評論量:%s"""%(detail_name,detail_url,detail_price,detail_com)print(msg)# 這里可以寫入文件操作button = driver.find_element_by_partial_link_text('下一頁') #檢測到右下一頁鏈接 button.click()time.sleep(2)get_good(driver) # 睡兩秒后繼續爬,爬的太快容易被服務器檢測到except Exception:passdef spilder(url,keyword):driver = webdriver.Chrome()driver.get(url)driver.implicitly_wait(7)try:input_tag = driver.find_element_by_id("key")input_tag.send_keys(keyword)input_tag.send_keys(Keys.ENTER)get_good(driver)finally:driver.close()if __name__ == '__main__':spilder("https:www.jd.com","情趣") 爬取京東商品 # -*- coding: utf-8 -*-from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By #按照什么方式查找,By.ID,By.CSS_SELECTOR from selenium.webdriver.common.keys import Keys #鍵盤按鍵操作 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait #等待頁面加載某些元素 from PIL import Image #pip3 install pillowimport timedef get_snap(driver):''':param driver::return: 返回屏幕的全圖'''driver.save_screenshot("snap.png")snap_obj = Image.open("snap.png")# snap_obj.show()return snap_objdef get_image(driver):''':param driver::return:返回驗證圖片的全圖'''img = driver.find_element_by_class_name("geetest_canvas_img")time.sleep(2)size = img.size #獲取到圖片大小location = img.location #獲取到圖片的相對位置 left = location["x"]top = location["y"]right = left + size["width"]bottom = top + size["height"]# print(left,top,right,bottom) snap_obj = get_snap(driver)image_obj = snap_obj.crop((left,top,right,bottom)) #截取全部中的坐標圖片# image_obj.show()return image_objdef get_distance(image1,image2):start_x = 58 # 圖片的x軸起始位置threhold = 60 # 誤差的閥值for x in range(start_x, image1.size[0]):for y in range(image1.size[1]): # x,y 是他們額像素點rgb1 = image1.load()[x, y] # 獲取第一張圖片的像素點rgb2 = image2.load()[x, y] # 獲取第二張圖片的像素點res1 = abs(rgb1[0] - rgb2[0])res2 = abs(rgb1[1] - rgb2[1])res3 = abs(rgb1[2] - rgb2[2])if not (res1 < threhold and res2 < threhold and res3 < threhold):return x - 7def get_tracks(distance):distance += 20 # 滑動距離+20 →欺騙服務器v0 = 0s = 0t = 0.2mid = distance*3/5forward_tracks = []while s < distance:if s < mid:a=2else:a=-3v = v0track = v*t+0.5*a*(t**2)track = round(track) # 四舍五入v0 = v + a*ts+=trackforward_tracks.append(track) # 移動軌跡back_tracks = [-1, -1, -1, -2, -2, -2, -3, -3, -2, -2, -1] # 多加的20個單位return {"forward_tracks":forward_tracks,"back_tracks":back_tracks}def slice(url,username,password):try:driver = webdriver.Chrome()driver.get(url)driver.implicitly_wait(3)# 1、輸入賬號,密碼,點擊登錄input_user = driver.find_element_by_id("input1")input_pwd = driver.find_element_by_id("input2")login_user = driver.find_element_by_id("signin")input_user.send_keys(username)input_pwd.send_keys(password)login_user.click()# 2、 點擊按鈕,出現驗證碼圖片(完整的圖)geetest_radar_tip = driver.find_element_by_class_name("geetest_radar_tip")geetest_radar_tip.click()# 3、針對沒有缺口的圖片截圖image1 = get_image(driver)# 4、點擊滑動按鈕,出現殘缺的圖片slider_button = driver.find_element_by_class_name("geetest_slider_button")slider_button.click()# 5、針對有缺口的圖片截圖image2 = get_image(driver)# 6、對比兩張圖片,找出缺口,就是滑動的2唯一distance = get_distance(image1, image2) # 獲取到圖片的位移信息# 7、按照人的行為習慣,把總位移切成小的位移track_dic = get_tracks(distance)# 8、 按照位移移動圖片slider_button = driver.find_element_by_class_name("geetest_slider_button") # 找到按鈕ActionChains(driver).click_and_hold(slider_button).perform() # 摁住它 forward_tracks = track_dic["forward_tracks"] # 前進的距離back_tracks = track_dic["back_tracks"] # 后退的距離(剛開始給distance+=20)print(forward_tracks, back_tracks)for forward_track in forward_tracks:ActionChains(driver).move_by_offset(xoffset=forward_track, yoffset=0).perform() # 移動增加的距離time.sleep(0.3) # 睡0.3秒模仿人動作延遲# print("==================================>")for back_track in back_tracks: # 后退的距離ActionChains(driver).move_by_offset(xoffset=back_track, yoffset=0).perform()ActionChains(driver).move_by_offset(xoffset=-3, yoffset=0).perform() # 最終抖一抖ActionChains(driver).move_by_offset(xoffset=3, yoffset=0).perform() # 抖一抖time.sleep(0.3)ActionChains(driver).release().perform() # 釋放time.sleep(2)except Exception:passfinally:driver.close()if __name__ == '__main__':url = "https://passport.cnblogs.com/user/signin"username = "username"password = "password"slice(url,username,password) 自動登錄博客園

?


?

轉載于:https://www.cnblogs.com/52-qq/p/8303336.html

總結

以上是生活随笔為你收集整理的请求库-selenium 模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。