4 中文亂碼 selenium的使用

 # 中文亂碼php

#處理中文亂碼
import requests
from lxml import etree
from urllib import request
url = 'http://pic.netbian.com/4kqiche/'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
response = requests.get(url=url,headers=headers)  #響應
#手動設置響應數據的編碼
# response.encoding = 'utf-8'
page_text = response.text
tree = etree.HTML(page_text)  #實例化
li_list = tree.xpath('//div[@class="slist"]/ul/li')
for li in li_list:
    img_src = li.xpath('./a/img/@src')[0]  
    img_name = li.xpath('./a/b/text()')[0]
    # 通用性
    img_name = img_name.encode('iso-8859-1').decode('gbk')    #西歐  向下兼容ascii   通常瀏覽器默認的文本編碼格式 
    request.urlretrieve(url="http://pic.netbian.com"+img_src,filename='./圖片/%s.jpg'%img_name)   #相對路徑
#   request.urlretrieve(url="http://pic.netbian.com"+img_src,filename=r'C:\spider\day01\圖片\%s.jpg'%img_name) #絕對路徑
    print(img_name,'0k')
print('OK')
1 鏈接池報警 請求頭改 Connection: keep-alive 爲close
             User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36
2 代理IP 在IP被封禁後
3 每次請求之間sleep進行間隔等待
模擬登錄 -- 爬取基於某些用戶的用戶信息
驗證碼識別:雲打碼平臺  http://www.yundama.com/ 打碼兔 超級鷹
使用流程:
    註冊
    登錄:
      普通用戶:
        查詢剩餘提分(充值)  http://www.yundama.com/price.html
      開發者用戶:
        建立軟件:個人軟件-》添加新軟件(ID,祕鑰)
        下載示例代碼:開發文檔-》點此下載:雲打碼接口DLL-》PythonHTTP示例下載        
代理:代理服務器
  - 快代理
  - 西祠代理
  - goubanjia
匿名度:
  透明:對方服務器知道你使用了代理ip也知道你的真實ip
  匿名:知道你使用了代理ip可是不知道你的真實ip
  高匿:什麼都不知道
類型:
  http:只能夠發起http請求
  https:只能夠發起https的請求
# 代理池
import
requests url = 'http://www.baidu.com/s?wd=ip' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' } page_text = requests.get(url=url,headers=headers,proxies={'http':'117.127.0.202:80'}).text with open('./ip.html','w',encoding='utf-8') as fp: fp.write(page_text)

# 構建代理池
http_list = [
{'http':'60.190.250.120:8080'},
{'http':'60.190.250.120:8080'},
{'http':'60.190.250.120:8080'}
]
https_list = [
{'https':'60.190.250.120:8080'},
{'https':'60.190.250.120:8080'},
{'https':'60.190.250.120:8080'}
]html

 #  selenium 自動化jquery

# 用來完成瀏覽器自動化相關的操做,能夠經過代碼的形式制定一些基於瀏覽器自動化的(行爲動做),當代碼執行後,瀏覽器就會自動觸發定義的事件.
- 環境安裝:
     pip install selenium
     下載對應瀏覽器的驅動軟件 
        http://chromedriver.storage.googleapis.com/index.html
     查看驅動和瀏覽器版本的映射關係:
        http://blog.csdn.net/huilan_same/article/details/51896672  
- 編碼流程:
  - 導包
  - 實例化某一款瀏覽器對象
  - 制定相關行爲動做
Selenium支持很是多的瀏覽器,如Chrome、Firefox、Edge等,還有Android、BlackBerry等手機端的瀏覽器。另外,也支持無界面瀏覽器PhantomJS。
PhantomJS 如今中止維護更新了,不建議使用,在無界面領域,建議google的chrome無頭.
https://www.cnblogs.com/bobo-zhang/p/9685362.html 更多請瀏覽這個link
# 簡單的百度自動化處理  chromedriver.exe是個軟件
from
selenium import webdriver # web驅動 顯式的自動化瀏覽器操做 from time import sleep bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.baidu.com') sleep(2) # 標籤訂位 tag_input = bro.find_element_by_id('kw') tag_input.send_keys('人民幣') btn = bro.find_element_by_id('su') btn.click() sleep(2) bro.quit() # 退出
from selenium import webdriver  # 顯式的Js滾輪操做
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://xueqiu.com')
sleep(5)
# 執行js實現滾輪向下滑動
js = "window.scrollTo(0,document.body.scrollHeight)"
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
bro.execute_script(js)
sleep(2)
# 加載更多的處理
a_tag = bro.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[1]/div[2]/div[2]/a')
a_tag.click()
sleep(5)
# 獲取當前瀏覽器頁面數據(動態數據)
bro.page_source  # 可print

bro.quit() # 退出
# 一款無可視化的瀏覽器(免安裝)  基於谷歌無頭
# 谷歌無頭瀏覽器
from selenium import webdriver
from time import sleep
from selenium.webdriver.chrome.options import Options
# 建立一個參數對象,用來控制chrome以無界面模式打開
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')

bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=chrome_options)
bro.get('https://www.baidu.com')
sleep(2)
bro.save_screenshot('1.png') #拍照截屏
#標籤訂位
tag_input = bro.find_element_by_id('kw')
tag_input.send_keys('人民幣')
sleep(2)

btn = bro.find_element_by_id('su')  # 找見 百度一下 按鈕
btn.click()  # 點擊進行搜索
sleep(2)

print(bro.page_source)  # 打印頁面資源
bro.quit()  #退出

# 前進後退web

# 模擬瀏覽器 前進 後退
from time import sleep
from selenium import webdriver
 
bro=webdriver.Chrome(executable_path='./chromedriver.exe')
bro.get('https://www.baidu.com')
sleep(1)
bro.get('https://www.taobao.com')
sleep(1)
bro.get('https://sogou.com')
sleep(1)

browser.back()  #後退
sleep(1)
browser.forward() #前進
print(bro.page_source) sleep(
1) bro.close()

# 動做鏈  拖動 點擊chrome

#動做鏈
from selenium import webdriver
from time import sleep
from selenium.webdriver import ChromeOptions
from selenium.webdriver import ActionChains  #動做鏈的類

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])

bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option)
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
bro.get(url=url)
#若是定位的標籤存在於iframe標籤之中,則必須通過switch_to(切換參照物)操做在進行標籤訂位  頁面加載的子頁面
bro.switch_to.frame('iframeResult')  # frame的id
source_tag = bro.find_element_by_id('draggable') # 開始地
taget_tag = bro.find_element_by_id('droppable')  # 目的地
#建立一個動做鏈的對象
action = ActionChains(bro) #實例化動做鏈對象 傳入瀏覽器對象
action.drag_and_drop(source_tag,taget_tag) 
action.perform()  #執行 
sleep(3)
# bro.quit()  # 退出
# 動做鏈 簡單版
from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains  
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
bro.get(url=url)
#若是定位的標籤存在於iframe標籤之中,則必須通過switch_to操做在進行標籤訂位
bro.switch_to.frame('iframeResult')
source_tag = bro.find_element_by_id('draggable')
#建立一個動做連的對象
action = ActionChains(bro)
action.click_and_hold(source_tag)

for i in range(4):
    #perform表示開始執行動做鏈
    action.move_by_offset(20,0).perform() #x,y 水平/垂直像素
    sleep(1)
bro.quit()

# 如何規避selenium被檢測到?api

正常狀況下咱們用瀏覽器訪問淘寶等網站的 window.navigator.webdriver的值爲 undefined。
而使用selenium訪問則該值爲true.

只須要設置Chromedriver的啓動參數便可解決問題。在啓動Chromedriver以前,爲Chrome開啓實驗性功能參數excludeSwitches,
它的值爲[
'enable-automation'],完整代碼以下:
from selenium.webdriver import Chrome
from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)

# QQ空間的模擬登陸瀏覽器

# 只在沒有驗證碼狀況下適用  QQ空間模擬登錄
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
url = 'https://qzone.qq.com'
bro.get(url=url)
#若是定位的標籤存在於iframe標籤之中,則必須通過switch_to操做在進行標籤訂位
bro.switch_to.frame('login_frame')
input_tag = bro.find_element_by_id('switcher_plogin').click()
bro.find_element_by_id('u').send_keys('576951284')  #這裏填寫你的QQ號
bro.find_element_by_id('p').send_keys('')  #這裏填寫你的QQ號
bro.find_element_by_id('login_button').click()
sleep(3)
print(bro.page_source)
bro.save_screenshot('zone.png') # 截屏 拍照
bro.quit()
# QQ空間模擬
from selenium import webdriver
from time import sleep
bro = webdriver.Chrome(executable_path='./chromedriver.exe')
url = 'https://qzone.qq.com'
bro.get(url=url)
#若是定位的標籤存在於iframe標籤之中,則必須通過switch_to操做在進行標籤訂位
bro.switch_to.frame('login_frame')
avartar_tag = bro.find_element_by_id('img_out_576951284').click()
sleep(3)
print(bro.page_source)
bro.save_screenshot('zone.png') 
bro.quit()
相關文章
相關標籤/搜索