明確な目的で
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のコンテンツを取得するためにセレンを使用する理由です。もちろん、着信パラメータをクラックするためのインターフェイスを直接見つけることができます。