Pythonアナログ上陸万能法-微博|知乎

16214 ワード

Pythonシミュレーション上陸は多くの人を悩ませており、今日は万能上陸方法を提供します.HTMLに精通する必要はありません.Pythonに精通する必要もありませんが、シミュレーションログインに成功することができます.本文はすべてのウェブサイトに登録する方法の一つであり、微博と知乎に限らず、その例として説明する.
使用するライブラリは「selenium」と「requests」です.seleniumでシミュレーションログインを行い、Cookiesをrequestsに転送し、最終的にrequestsでウェブサイトのキャプチャを行います.利点は、「selenium」自体がキャプチャ速度が遅いという問題(上陸としてのみ使用されるため)を回避するだけでなく、requestsを利用して上陸する際に煩雑なCookiesを作成する過程(seleniumから直接cookiesを持ってくるため)を回避することである.文章の前に手順とコードをリストし、後にマイクロブログにログインして知っている例を補充した.
文章は最後に怠け者の方法を示した.近道をしようとする友达は直接第4部を見て上陸を知っています.この方法はすべてのサイトにログインするのに適しており,例として知られているだけで説明しやすい.
---------スタート----------
必要材料:1.自分の好きなwebdriver(必須)2.Anaconda(オプション).seleniumはブラウザを介して実行されるため、小型ブラウザを追加ダウンロードする必要があります.Anacondaは皆さんにもダウンロードすることをお勧めします.pythonのライブラリがたくさん入っていて、使いやすくて無料です.友情リンク:1.Google Web Driverダウンロード2.Anacondaダウンロード
第一部:seleniumによる上陸
seleniumライブラリのインポート
from selenium import webdriver

ブラウザがコンピュータに保存されている場所を明確にシミュレートします.例えば、私はDディスクを持っています.
chromePath = r'D:\Python Program\chromedriver.exe' 

seleniumのwebdriver方程式でブラウザのパスを指定し、ブラウザを開きます.シミュレーションブラウザには、Firefox、Safariなど、さまざまなオプションがあります.今回はGoogleのアナログブラウザを使っています.注意:'.Chomeは大文字です.
wd = webdriver.Chrome(executable_path= chromePath)

Webdriverにユーザー名とパスワードを記入させます
wd.find_element_by_xpath('        ').send_keys('   ')
wd.find_element_by_xpath('       ').send_keys('  ')

Webdriveにログインをクリックさせ、ボタンならclick()、フォームならsubmit()を選択します.
wd.find_element_by_xpath('        ').click() #    
wd.find_element_by_xpath('        ').submit() #    

ログインが完了すると、すべてのクッキーが「wd」に存在し、いつでも呼び出すことができます.
第2部:seleniumのcookiesをrequestsに転送する
requestsライブラリをインポートし、Session()を構築します.
import reqeusts
req = requests.Session()

「wd」からクッキーを呼び出す
cookies = wd.get_cookies()

selenium形式のcookiesをrequestsで使用可能なcookiesに変換します.
for cookie in cookies:
        req.cookies.set(cookie['name'],cookie['value'])

大成功!requestsでWebページをキャプチャしてみます.
req.get('      ')

以上がpythonシミュレーションログインの万能な方法で、ウェブサイトに渡されたCookiesを分析する必要はありません.pythonにユーザー名とパスワードをどこに記入するかを教えるだけでいいです.とても便利です.
第三部:微博模擬上陸
import requests
from selenium import webdriver
chromePath = r'       '
wd = webdriver.Chrome(executable_path= chromePath) #     
loginUrl = 'http://www.weibo.com/login.php' 
wd.get(loginUrl) #      
wd.find_element_by_xpath('//*[@id="loginname"]').send_keys('userword') #     
wd.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input').send_keys('password') #    
wd.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a').click() #    
req = requests.Session() #  Session
cookies = wd.get_cookies() #  cookie
for cookie in cookies:
    req.cookies.set(cookie['name'],cookie['value']) #  cookies
test = req.get('      ')

重要な手順をいくつか説明します.
1.場所を探す.Googleブラウザを使用して各要素のXpathを検索することをお勧めします.これを参照してください.ChromeからXPATHパスを取得します.
2.click関数かsubmit関数かを選択します.どれも試してみると、必ず成功することをお勧めします.
3.微博にログインして認証コードを入力するように要求されたらどうしますか?マイクロブログにログインすると検証コードの入力が要求されることがあります.このとき、手動で検証コードを入力するコードを1行追加することができます.例:
wd.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a').click() #    
wd.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[3]/div/input').send_keys(input("     : "))
wd.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a').click()#      

認証コードを入力するときは2回クリックしてログインする必要があります.認証コードの入力ボックスは一度クリックしてログインした後にしか弾けないからです!サイトごとにseleniumを活用することが重要です!しかし、これはそれらのCookiesを分析するのに比べて、まるで小児科です.
第四部:アナログ上陸
よく更新することを知っているので、方法を書いても使いにくいかもしれません.そこで私は究極の方法を考えて、半手動で上陸しました.seleniumでブラウザを開き、手動でアカウントのパスワードを入力し、検証コードがあれば検証コードを記入します.ログインが成功するまで「get_cookies()」関数を使用してCookiesを呼び出します.この方法は少し不器用に見えますが、数百行のコードよりも効率がどれだけ高いか分かりません.携帯電話でQRコードをスキャンしてログインすることもできます!これらのログイン操作がseleniumが開いているブラウザ内で行われる限り、seleniumはこれらのCookiesを完全に記録することができます.コードは次のとおりです.
import time
import requests
from selenium import webdriver
chromePath = r'        '
wd = webdriver.Chrome(executable_path= chromePath) 
time.sleep(45)#  45   ,        。    ,     。
cookies = wd.get_cookies()#  Cookies
req = requests.Session()
for cookie in cookies:
    req.cookies.set(cookie['name'],cookie['value'])
req.headers.clear() 
test = req.get('      ') 

req.headers.clear()は、元のreqにpythonロボットがマークされている情報を削除します.この情報はいくつかのサイト(例えば知っている)に捉えられます.上陸爬取に失敗する.必ず削除してください.
time.sleep()は、次のプログラムの実行を一時停止することができます.その間、手動でログインしたり、QRコードをスキャンしたりすることができます.その後、pythonに45秒後に「cookies=wd.get_cookies()」を実行させます.seleniumのget.cookies方程式は、手動でログインしたcookiesを捕まえることができます.時間値の設定は、自分が必要とする時間によって異なります.プログラムでサイト名、ユーザー名、パスワードなどをすべて入力して認証コードが1つ残っている場合は、数秒だけ設定すればいいです.timeに参加する.sleepのメリットは、プログラム自体が実行を停止する必要がないことです!次のすべてのプログラムはシームレスに接続できます.
これを読んでくれてありがとう.文章の最初に言った怠け者の方法は、私が知っている方法にログインして、半手動で使うことです.しかし、それが悪いとは思わないでください.結局、私たちの目的はウェブサイトの内容を登って、できるだけ早く上陸問題を解決することです.仕事を登り始めるのが正しい方向です.この方法は、Webサイトに迅速にログインし、多くの時間を節約することができます.この方法の万能な原理は、実際のブラウザを呼び出すことです.では、通常の状況でブラウザがアクセスできるサイトさえあれば、この方法でログインすることができます.
-------------------------------------------
本文の終わり-以下はよくある質問のまとめとコードの贈呈です.
質問1:サイトがseleniumを無効にしたらどうしますか?
解決策:このような状況は極めて少ない.サイトがこのような反爬虫手段を採用すれば、本当のユーザーを誤傷しやすい.もし本当にこのような状況に遭遇したら、seleniumにロボットであることを示す情報を隠すだけでいいです.参考リンク:Cana website detect when you are using selenium with chromedriver?
質問2:新しく開いたwebdriverに保存したクッキーを持たせるにはどうすればいいですか?
ソリューション:取得したcookiesをローカルに保存します.次回ログイン時に現地のクッキーを直接導入します.参照リンク:How to save and load cookies using python selenium webdriver
友情は书いた登录のコードを赠ります-知っています
from selenium import webdriver
from requests import Session
from time import sleep
req = Session()
req.headers.clear() 
chromePath = r'D:\Python Program\chromedriver.exe'
wd = webdriver.Chrome(executable_path= chromePath) 
zhihuLogInUrl = 'https://www.zhihu.com/signin'
wd.get(zhihuLogInUrl)
wd.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/div[1]/div[1]/div[2]/span').click()
wd.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/form/div[1]/div[1]/input').send_keys('username') 
wd.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/form/div[1]/div[2]/input').send_keys('password')
sleep(10) #        
wd.find_element_by_xpath('/html/body/div[1]/div/div[2]/div[2]/form/div[2]/button').submit() 
sleep(10)#  Cookies  
cookies = wd.get_cookies()
for cookie in cookies:
    req.cookies.set(cookie['name'],cookie['value'])