セレニウムとパイソンクローラー(2つ)[待機中およびマルチウィンドウ(ターゲット1)]

明確な目的で

1.最初にWebページを開くこと
2.対応する操作を実行する要素を1つ以上見つけます
3.必要に応じて要素を操作および取得し、取得したデータを処理します
4.次に必要に応じて再度開きます多くのWebページは前の操作を繰り返します。
一般に、私たちのステップはこれらの4つの主要なステップに分割されますが、各ステップはいくつかの小さなステップに分割できます。だから今、私たちは目標1を達成するようになりました

Webページを開きます(セグメント1、Webページを開きます)

これは前のブログに書かれています。
get()メソッドを使用してWebページを開きます

from selenium import webdriver
drive=webdriver.Chrome()
drive.maximize_window()#窗口最大化
drive.get('https://www.baidu.com/')
print(len(drive.page_source))#page_source是返回的网址源码

Webページを開く(サブディビジョン2、ページを開く)

誤解されているプレゼンテーション; get()メソッドを使用すると、まったく新しいWebページが開きます。
たとえば;

from selenium import webdriver
drive=webdriver.Chrome()
drive.maximize_window()#窗口最大化
drive.get('https://www.baidu.com/')
drive.get('https://123.sogou.com/')
print(len(drive.page_source))#page_source是返回的网址源码

一見すると2つのWebページが開いているように見えますが、実際には最後に1つのWebページしか開かれていません。これは、前のWebページを閉じて次のWebページを開くのと同じです。しかし、実際のクロール作業を行うと、あるページから別のページにジャンプしてから戻ることがよくあります。つまり、ブラウザがこの状態に
ここに写真の説明を挿入
なり、元の状態で別のブラウザを開くことを期待しています。
正しい姿勢
1.execute_Script()メソッドを使用してWebページを切り替えます
2.ウィンドウ(最初のウィンドウ)の位置を取得します
3. switc_to_window()を使用して切り替え
ますコードは次のとおりです。

from selenium import webdriver
drive=webdriver.Chrome()
drive.maximize_window()#窗口最大化
drive.get('https://www.baidu.com/')
print(len(drive.page_source))#page_source是返回的网址源码

drive.execute_script("window.open('https://123.sogou.com/')")
#drive.window_handles获取窗口通过索引定位窗口
drive.switch_to_window(drive.window_handles[1])

効果は以下の通りです。
ここに写真の説明を挿入

Webページを開きます(サブディビジョン3、ロードを待機中)[暗黙の待機中]

Webページを開くのは高速ですが、Webページをロードする必要はありません。対応する要素をロードせずにWebページを開いて、急いで要素を見つけた場合、間違いなくエラーが発生します。
1.いわゆる暗黙的な待機は、実際にはtimeモジュールをインポートしてsleep()メソッドを使用することと同じです。しかし、もっと特別なのは、セレンがより複雑なことです(一緒に飛んでいるさまざまなスレッドでsleep()を直接使用することは無意味であり、それ自体を実行してロードする必要もあります)。
メソッドimplicitly_wait()を直接使用し
、前のブログの例を使用します。

from selenium import webdriver

drive=webdriver.Chrome()
drive.get('https://www.baidu.com/')
############
drive.implicitly_wait(10)#等待十秒
InputTag=drive.find_element_by_name('wd')
InputTag.send_keys('python')
############
SubmitBut=drive.find_element_by_xpath('//input[@type="submit" and @value="百度一下"]')
SubmitBut.click()


Webページを開きます(サブディビジョン3、ロードを待機中)[明示的な待機中]

これは少し賢いです、あなたは死なないために判断条件を加えることができます。もちろん、より多くのものがインポートされます。

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec
#Ec加入判断条件的东东

コードは次のように表示されます。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as Ec




drive=webdriver.Chrome()
drive.maximize_window()
drive.get('https://www.baidu.com/')
drive.implicitly_wait(10)
print(len(drive.page_source))


try:
    InputTag=WebDriverWait(drive,10).until(
        Ec.presence_of_element_located((By.ID,'kw'))
    )
    #等待十秒要是提前出现了就不等了
    InputTag.send_keys('python')


except Exception as error:
    print(error)




Enter=drive.find_element(By.ID,'su')
Enter.click()
print(len(drive.page_source))

また、判断条件もたくさんあります
ここに写真の説明を挿入
。あなたの英語はそれほど悪くないと思います。

最終的なデモコード

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as Ec




drive=webdriver.Chrome()
drive.maximize_window()
drive.get('https://www.baidu.com/')
drive.implicitly_wait(10)
print(len(drive.page_source))


try:
    InputTag=WebDriverWait(drive,10).until(
        Ec.presence_of_element_located((By.ID,'kw'))
    )
    InputTag.send_keys('python')


except Exception as error:
    print(error)




Enter=drive.find_element(By.ID,'su')
Enter.click()
print(len(drive.page_source))

'''切换网页'''

drive.execute_script("window.open('https://123.sogou.com/')")
drive.switch_to_window(drive.window_handles[1])


ここに写真の説明を挿入
さらに、ここに小さな詳細があります。
ここに写真の説明を挿入
これが、Ajaxのコンテンツを取得するためにセレンを使用する理由です。もちろん、着信パラメータをクラックするためのインターフェイスを直接見つけることができます。

おすすめ

転載: blog.csdn.net/FUTEROX/article/details/108428656