この記事では、Web の自動テスト ツール Selenium について詳しく紹介します [おすすめコレクション]

序文

学習した知識を定着させるために、著者は将来の復習を容易にするためにいくつかの学習ノート ブログの公開を開始しようとしました。もちろん、初心者が新しいテクノロジーを学ぶのに役立つのであれば、それも素晴らしいことです。著者は新人なので、記事に記録ミスがある場合は、読者や友人が批判して修正してください。
(ブログの参照ソース コードは、私のホームページのリソースにあります。学習プロセス中に質問がある場合は、コメント エリアで質問してください)あ>

宝物を発見する

数日前、巨大な人工知能学習 Web サイトを発見しました。わかりやすくてユーモアがあるので、みんなと共有せずにはいられませんでした。 【宝の入り口】。

セクション 01 Selenium の概要

Seleniumウェブ自動テスト ツールで、もともとウェブサイト自動テスト用に開発されました。Selenium は実行できます。ブラウザ上で直接
、すべての主要なブラウザをサポートします。

Selenium はブラウザを制御してリクエストを送信したり、Web ページのデータを取得したりできるため、クローラー分野への応用が可能です。

Selenium を使用すると、ブラウザは指示に従って自動的にページを読み込み、必要なデータを取得したり、ページのスクリーンショットを撮ったり、Web サイト上で特定のアクションが発生したかどうかを判断したりできます。

Selenium には独自のブラウザがなく、ブラウザ機能もサポートしていません。使用するにはサードパーティのブラウザと組み合わせる必要があります

Seleniumライブラリのバージョンにより、対応するメソッド名が異なります。

公式ドキュメント:http://selenium-python.readthedocs.io/index.html

セクション 02 ブラウザドライバーのインストール (Google を例にします)

1.ブラウザのバージョンを確認する

ここに画像の説明を挿入します

2. 対応するバージョンのドライバーをダウンロードします。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

3. Chorm の過去のバージョンをダウンロードする方法

  • ブラウザのバージョン番号を取得する

こちらhttps://vikyd.github.io/download-chromium-history-version/ にアクセスするには、科学的資料にアクセスする必要がある場合があります。 [インターネット (dddd)] を選択し、バージョン ドロップダウンで希望のプラットフォームを選択し、入力ボックスにバージョン番号を入力します (例: Windows 64 ビット バージョン 113.0)。

ここに画像の説明を挿入します

  • ブラウザのバージョンを選択し、圧縮パッケージをダウンロードします
    ここに画像の説明を挿入します
  • ダウンロード後、解凍してご利用ください

ここに画像の説明を挿入します

  • chromedriver.exe を任意の場所に保存し、現在のパスを環境変数に保存します ([マイ コンピュータ] > [プロパティ] を右クリック > [システムの詳細設定] > [詳細設定] > [環境変数] > [システム変数] > [パス])。パス変数を追加する場合は上書きしないように注意し、上書きされた場合はシャットダウンせずに Baidu を使用してください。追加が成功したら、次のコードを使用してテストします。
# 导入 webdriver
import time
from selenium import webdriver

# 调用环境变量指定的PhantomJS浏览器创建浏览器对象
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
# get方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择
driver.get("https://www.baidu.com/")

# id="kw"是百度搜索输入框,输入字符串"长城"
driver.find_element(By.CSS_SELECTOR,"#kw").send_keys("长城")
# id="su"是百度搜索按钮,click() 是模拟点击
driver.find_element(By.CSS_SELECTOR,"#su").click()

time.sleep(20)

ここに画像の説明を挿入します

セクション 03 ページ要素の配置

定位一个元素用 element,定位一组元素用 elements

1. 指定したページを開く

1. 新しいウィンドウに切り替えないでください。

Selenium を使用して指定したページを開くには、まず WebDriver のインスタンスを初期化してから、このインスタンスを使用してターゲット ページを開く必要があります。以下は、 PythonSelenium を使用して、指定したページを開く方法を示す例です。

from selenium import webdriver

# 初始化一个WebDriver实例,这里使用Chrome作为浏览器
driver = webdriver.Chrome()

# 打开指定的页面,将URL替换为你要访问的网页地址
url = "https://www.example.com"
driver.get(url)

# 在这里,你可以执行与打开页面相关的操作

# 最后,关闭浏览器窗口
driver.quit()

上記のコードでは、まず Seleniumwebdriver モジュールをインポートし、 Chrome ブラウザ メソッド をそのアドレスに置き換えます。アクセスしたいウェブページ。その後、ページ上でテストまたはタスクに関連するアクションを実行し、、ターゲット ページの get メソッドを使用して指定されたページを開きWebDriver 例。次に、URLquit

2. 新しいウィンドウに切り替えます

上記のメソッドは、現在のウィンドウまたはタブで新しいページを開き、window.open(url)< を使用して現在のページを新しい URL に置き換えます。 a i=2> 新しいページを開く:

driver.execute_script("window.open('https://www.example.com', '_blank');")  # 使用JavaScript打开一个新页面

このメソッドは、execute_script メソッドを使用して JavaScript コードを実行し、指定された パラメータは、新しいウィンドウまたはタブで を開くようにブラウザに指示します。この方法は、 現在のページを置き換えずに新しいウィンドウでページを開く場合に適していますURL'_blank'URL

window.open() メソッドを使用して新しいページを開く場合は、driver.window_handles の使用が必要になる場合があることに注意してください。および は、後述するウィンドウ ハンドルと同様に、異なるウィンドウ間の切り替えを管理します。これにより、さまざまなブラウザ ウィンドウでアクションを実行できるようになりますdriver.switch_to.window()

要約すると、execute_script メソッドは通常、特定の操作や操作のために JavaScript を実行するために他の Selenium メソッドと組み合わせて使用​​されますが、新しいページを開くために単独で使用されることはありません。

3. ブラウザウィンドウを開いたままにしてください

デフォルトでは、Selenium WebDriver はスクリプトの実行終了後にブラウザ ウィンドウを閉じますが、オプション「デタッチ」を設定することで 本当、ブラウザ ウィンドウを開いたままにして手動操作を実行できます

from selenium import webdriver

# 创建ChromeOptions对象
options = webdriver.ChromeOptions()

# 添加选项,防止浏览器自动关闭
options.add_experimental_option("detach", True)

# 初始化一个WebDriver实例,将选项传递给Chrome
driver = webdriver.Chrome(options=options)

# 打开指定的页面
url = "https://www.csdn.net"
driver.get(url)

# 在这里,你可以执行与打开页面相关的操作

# 手动关闭浏览器时,可以保持它打开

2. IDの位置決め

Selenium を使用して要素の ID でターゲットを指定するには、By.ID セレクターと find_element メソッド。要素の ID でターゲットを設定する方法の例を次に示します。

from selenium import webdriver

# 初始化一个WebDriver实例,这里使用Chrome作为浏览器
driver = webdriver.Chrome()

# 打开指定的页面
url = "https://www.example.com"
driver.get(url)

# 通过元素的ID进行定位并执行操作
element = driver.find_element(By.ID, "element_id")

# 在这里,你可以执行与该元素相关的操作,例如单击、输入文本等
element.click()

# 最后,关闭浏览器窗口
driver.quit()

上記の例では、driver.find_element(By.ID, "element_id") は ID 属性によって要素を見つけて変数 element に保存します。これは Element- で実行できます。関連する操作。 "element_id" を、探している要素の実際の ID に忘れずに置き換えてください。

3. 名前の位置付け

# 通过元素的name属性进行定位并执行操作
element = driver.find_element(By.NAME,"element_name")

4. クラスの位置付け

# 通过元素的CSS类名进行定位并执行操作
element = driver.find_element(By.By.CLASS_NAME, ".element_class")

5. タグの配置

各タグは機能の種類を定義するために使用されることが多いため、タグを介して要素を識別する成功率は非常に低く、通常、各ページでは同じタグが多数使用されます。

# 通过元素的标签名进行定位并执行操作
element = driver.find_element(By.TAG_NAME,"element_tag")

element_tagサンプル コードの は、 など、探している要素の HTML タグ名を表します。具体的には、 要素を検索したい場合は、 に置き換えます。 などに置き換えることができます。 要素の場合、< div >, < a >, < p >< div >element_tag"div"< a >element_tag"a"

6. xpathの位置決め

XPath (XML パス言語) は、XML ドキュメント内の要素を検索するための言語です。HTML は XML ベースのマークアップ言語の変形であるため、HTML ドキュメントにも適用されます。 XPath は要素を検索するための強力な方法であり、ドキュメント内の要素の位置に関係なくWeb ページ上の要素を正確に見つけることができます。 XPath の配置の例をいくつか示します。

1. 要素名による位置決め:

  • 定位所有的链接元素://a
  • 定位所有的段落元素://p
  • 位置最初のタイトル要素://h1

2. 要素属性による位置決め:

  • 特定の ID 属性を持つ要素を検索:

    //*[@id='element_id']
    
  • 特定のクラス属性を持つ要素:ターゲット

    //*[@class='element_class']
    

3. テキストコンテンツによる位置付け:

  • ターゲット特定のテキストを含む要素:

    //*[text()='要查找的文本']
    
  • 特定のテキストで始まる要素を検索:

    //*[starts-with(text(), '开头文本')]
    
  • ターゲット特定のテキストを含むリンク:

    //a[contains(text(), '链接文本')]
    

4. 要素階層による配置:

  • 配置親要素の子要素:

    //div[@id='parent_id']/p(查找 id 属性为 'parent_id' 的 < div > 元素下的所有 < p > 元素)
    
  • 配置祖先要素の子要素:

    //div[@class='grandparent_class']//span(查找 class 属性为 'grandparent_class' 的祖先元素下的所有< span >元素)
    

5. 論理演算子を使用します。

  • 複数の条件を満たす要素を同時に配置します:

    //input[@type='text' and @name='username'](查找type属性为 'text' 且 name 属性为 'username' 的输入框)
    

これらは、XPath の基本的な例のほんの一部です。XPath には非常に豊富な構文と機能があります。必要に応じて、さまざまな条件を組み合わせてカスタマイズして、要素を見つけることができます。 Selenium では、find_element + By.XPATH メソッドを使用して XPath の位置決めを実現できます。例:

element = driver.find_element(By.XPATH,"//a[contains(text(), '链接文本')]")

これにより、特定のテキストを含むリンク要素が検索されます。必要に応じて、XPath 式を変更して別の要素をターゲットにすることができます。

6. 例

<html>
  <head>...<head/>
  <body>
    <div id="csdn-toolbar">
      <div class="toolbar-inside">
        <div class="toolbar-container">
          <div class="toolbar-container-left">...</div>
          <div class="toolbar-container-middle">
            <div class="toolbar-search onlySearch">
			<div class="toolbar-search-container">
				<input id="toolbar-search-input" autocomplete="off" type="text" value="" placeholder="C++难在哪里?">

上記のタグに従って、最後の行を配置する必要がありますinput タグ。以下に 4 つの方法を示します。xpath 配置方法は多様であり、一意ではないので用途に合わせて分析できます。

# 绝对路径(层级关系)定位
driver.find_element(By.XPATH,
	"/html/body/div/div/div/div[2]/div/div/input[1]")
# 利用元素属性定位
driver.find_element(By.XPATH,
	"//*[@id='toolbar-search-input']"))
# 层级+元素属性定位
driver.find_element(By.XPATH,
	"//div[@id='csdn-toolbar']/div/div/div[2]/div/div/input[1]")
# 逻辑运算符定位
driver.find_element(By.XPATH,
	"//*[@id='toolbar-search-input' and @autocomplete='off']")

7. CSSセレクター

CSS はセレクターを使用して属性をページ要素にバインドします。コントロールの任意の属性を柔軟に選択できます。一般に、配置は xpath よりも高速です。要素の配置に CSS セレクターを使用することは、Selenium では非常に一般的で便利です。一般的な CSS セレクターの例をいくつか示します。

1. 要素名による位置決め:

  • 定位所有的链接元素a
  • 定位所有的段落元素p
  • 定位所有的按钮元素button

2. 要素 ID による位置決め:

ターゲット特定の ID 属性を持つ要素:#element_id

element = driver.find_element(By.CSS_SELECTOR,"#element_id")

3. クラス名で検索します。

  • 特定のクラス属性を持つ要素を検索: .element_class
element = driver.find_element(By.CSS_SELECTOR,".element_class")

4. 要素属性による位置決め:

  • 特定の属性値を持つ要素を検索する:[attribute='value']
element = driver.find_element(By.CSS_SELECTOR,"[name='username']")

5. 属性値による部分一致:

  • 特定の属性値を含む要素を検索します: [attribute*=‘value’]
element = driver.find_element(By.CSS_SELECTOR,"[href*='example.com']")

6. 条件を組み合わせると、次のようになります。

  • 配置複数の条件を同時に満たす要素: .class1.class2
element = driver.find_element(By.CSS_SELECTOR,".element_class1.element_class2")

7. 子要素の配置:

  • 配置親要素の子要素:#parent_id > .child_class
element = driver.find_element(By.CSS_SELECTOR,"#parent_id > .child_class")

8. 疑似クラスセレクター:

たとえば、mouse-hover 要素の配置: :hover

element = driver.find_element(By.CSS_SELECTOR,"a:hover")

8. リンクの位置決め

Selenium を使用してハイパーリンク (リンク) 要素を検索するには、通常、HTML のリンク タグである <a> タグを持つ要素を検索する必要があります。テキスト コンテンツ、リンク テキスト、部分的なリンク テキストなど、さまざまな方法を使用してハイパーリンクを見つけることができます。リンク ターゲティングの一般的な例をいくつか示します。

1. リンク テキストによるターゲット (完全一致):

リンクのテキスト コンテンツをターゲティングに使用し、テキストがリンクと正確に一致することを確認します。

   # 查找所有链接文本为"下一页"的元素
   element = driver.find_elements(By.LINK_TEXT, "文本")

2. リンクテキストによるターゲティング(部分一致):

リンクのテキスト コンテンツの一部を使用してターゲットを設定すると、リンクのテキストの一部と一致する可能性があります。

   element = driver.find_element(By.PARTIAL_LINK_TEXT,"部分文本")

たとえば、リンク テキストが「詳細についてはここをクリックしてください」である場合、部分一致には「ここをクリックしてください」または「詳細情報を入手してください」を使用できます。

これらのメソッドは、特にリンクのテキストの内容がわかっている場合に非常に便利です。ただし、大文字と小文字が区別されるため、テキスト コンテンツの大文字と小文字がリンク テキストと一致していることを確認してください。

複数のリンクを検索するには、find_element**s**(By.LINK_TEXT, "文本") または find_element**s**(By.PARTIAL_LINK_TEXT,"部分文本") を使用します。これらは要素のリストを返し、リストを反復処理して検索できます。複数の Link 要素。

例:

elements = driver.find_elements(By.PARTIAL_LINK_TEXT,"部分文本")
for element in elements:
    print(element.text)

これにより、リンク テキストの「部分テキスト」を含むすべてのリンク要素が印刷されます。

9. Youdao の翻訳例

Youdao Translation Web サイトにアクセスして単語を入力し、翻訳されたコンテンツを取得します

import time

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

# 创建ChromeOptions对象
options = webdriver.ChromeOptions()

# 添加选项,防止浏览器自动关闭
options.add_experimental_option("detach", True)

# 创建Chrome WebDriver
driver = webdriver.Chrome(options=options)

# 打开有道翻译页面
driver.get("https://fanyi.youdao.com/")

# 等待输入框可见
input_element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "js_fanyi_input"))
)

# 输入内容
input_element.send_keys("hello")


# 如果有广告弹出框,关闭它
try:
    close_btn = driver.find_element(By.CSS_SELECTOR, ".close")
    close_btn.click()
except Exception:
    pass  # 如果没有广告,继续执行

# 等待翻译结果出现
transTarget = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "js_fanyi_output_resultOutput"))
)

# 输出翻译结果
print(transTarget.text)

# 关闭浏览器
# driver.quit()

ここに画像の説明を挿入します

セクション04 ブラウザ制御

1. ブラウザのウィンドウサイズを変更する

webdriver は、ブラウザ ウィンドウのサイズを変更するset_window_size() メソッドを提供します

from selenium import webdriver

# 初始化浏览器驱动程序,这里使用Chrome作为示例
driver = webdriver.Chrome()

# 最大化浏览器窗口
driver.maximize_window()

# 或者设置特定大小的窗口
# driver.set_window_size(1024, 768)  # 传递所需的宽度和高度

# 访问网页
driver.get("https://www.example.com")

# 在这里执行其他操作...

# 关闭浏览器
driver.quit()

2. ブラウザの進む・戻る

Selenium でブラウザの進む方向と戻る方向の操作を実行するには、forward()back を使用できます。 () メソッド

# 在这里执行其他操作...

# 执行前进操作
driver.forward()

# 执行后退操作
driver.back()

# 在这里执行其他操作...

進む操作と戻る操作はブラウザの履歴に依存することが多いことに注意してください。ブラウザ履歴に前後のページがない場合、これらのメソッドは何も実行しない可能性があります。したがって、進むと戻るを使用する前に、ブラウザが複数のページにアクセスして履歴を確立していることを確認してください

3. ブラウザの更新

Selenium でブラウザの更新操作を実行するには、refresh() メソッドを使用できます。以下は、Python で Selenium を使用してブラウザ ページを更新する方法を示す例です。

from selenium import webdriver

# 刷新浏览器页面
driver.refresh()

このメソッドは、ユーザーがブラウザの更新ボタンを手動でクリックしたかのように、現在のページを再読み込みします。更新操作を使用してページのコンテンツを再ロードし、ページの状態が変化したときにテスト スクリプトがページを確実に再ロードできるようにすることができます。

4. ブラウザウィンドウの切り替え

Selenium では、ブラウザ ウィンドウを切り替えるには、window_handles 属性を使用して現在開いているウィンドウを取得できますすべてのウィンドウ ハンドルswitch_to.window() メソッド 特定のウィンドウ ハンドルに切り替えます。以下は、Python で Selenium を使用してブラウザ ウィンドウを切り替える方法の例です。

from selenium import webdriver

# 初始化浏览器驱动程序,这里使用Chrome作为示例
driver = webdriver.Chrome()

# 打开第一个网页
driver.get("https://www.example1.com")

# 打开第二个网页
driver.execute_script("window.open('https://www.example2.com', '_blank');")

# 获取所有窗口句柄
window_handles = driver.window_handles

# 切换到第二个窗口
driver.switch_to.window(window_handles[1])

# 在第二个窗口执行操作

# 切换回第一个窗口
driver.switch_to.window(window_handles[0])

# 在第一个窗口执行操作

# 关闭浏览器
driver.quit()

上記の例では、まず 2 つの異なる Web ページを開いてから、window_handles を使用してすべてのウィンドウ ハンドルを取得します。異なるウィンドウ ハンドルに切り替えることで、異なるブラウザ ウィンドウで操作を実行できます

ウィンドウ ハンドル インデックスは通常 0 から始まるので、最初のウィンドウのハンドルは window_handles[0] 、2 番目のウィンドウのハンドルは window_handles[1] というようになります。必要に応じて、他のウィンドウハンドルに切り替えて操作を実行できます。

ウィンドウ ハンドルは、ブラウザ ウィンドウを一意に識別するために使用される識別子または参照です。新しいブラウザ ウィンドウまたはタブを開くたびに、ブラウザはそのウィンドウに一意のハンドルを割り当てます。これらのハンドルはブラウザ レベルで割り当てられ、マルチウィンドウ ブラウザ環境での切り替えや操作のためにさまざまなブラウザ ウィンドウまたはタブを識別するために使用されます。

Selenium などの自動テスト ツールでは、複数のウィンドウ間で操作を実行するために、異なるブラウザ ウィンドウを制御および切り替えるためにウィンドウ ハンドルが使用されます。ウィンドウハンドルを取得することで、ウィンドウ間でフォーカスを切り替えたり、ポップアップウィンドウの操作など、さまざまな操作を行うことができます。

ウィンドウ ハンドルは通常、特定のブラウザ ウィンドウを見つけて操作するために使用できる文字列です。 Selenium では、window_handles プロパティを使用して現在開いているすべてのウィンドウ ハンドルを取得し、switch_to.window() メソッドを使用して特定のウィンドウ ハンドルに切り替えることができます。これにより、マルチウィンドウのブラウザ環境でのテストや運用の自動化が容易になります。

5. 共通操作

Selenium WebDriver または同様の自動テスト ツールを使用する場合、これらのメソッドを使用して Web ページの要素と対話し、情報を取得できます。各メソッドの使用例を次に示します。

1. send_keys(): 指定されたコンテンツの入力をシミュレートします

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# 找到输入框元素并输入文本
input_element = driver.find_element_by_id("username")
input_element.send_keys("myusername")

この例では、send_keys() メソッドは、入力ボックスに ID「username」を持つ「myusername」を入力することをシミュレートします。

2.clear(): クリアテキストコンテンツ

# 清除输入框中的文本
input_element.clear()

clear() メソッドは、前の入力ボックスのテキスト内容をクリアするために使用されます。

3. is_displayed(): 要素が表示されているかどうかを判断します。

# 检查元素是否可见
if input_element.is_displayed():
    print("Input element is visible on the page.")
else:
    print("Input element is not visible on the page.")

is_displayed() メソッドは、ページ上の要素が表示されているかどうかを確認するために使用されます。この例では、入力ボックスが表示されている場合、「入力要素がページ上に表示されます。」が出力されます。

4. get_attribute(): タグの属性値を取得します。

# 获取元素的href属性值
link_element = driver.find_element_by_link_text("Example Link")
href_value = link_element.get_attribute("href")
print("Href attribute value is:", href_value)

get_attribute() メソッドは、要素の指定された属性の値を取得するために使用されます。この例では、リンクテキストが「Example Link」である要素の href 属性値を取得します。

5. size: 要素のサイズを返します。

# 获取元素的宽度和高度
element_size = input_element.size
print("Element size is:", element_size)

size は要素の幅と高さを返すプロパティです。この例では、入力ボックス要素のサイズを取得します。

6. text: 要素のテキストを返します。

# 获取元素的文本内容
paragraph_element = driver.find_element_by_css_selector("p")
paragraph_text = paragraph_element.text
print("Paragraph text is:", paragraph_text)

text は、要素のテキスト内容を返すプロパティです。この例では、<p> 要素のテキスト コンテンツを取得します。

6. CSDN ページ要素の対話例

# coding=utf-8
import time

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get('https://www.csdn.net/')
time.sleep(2)
# 定位搜索输入框
text_label = driver.find_element(By.ID, "toolbar-search-input")

# 在搜索框中输入 东离与糖宝
text_label.send_keys('东离与糖宝')
time.sleep(2)

# 清除搜索框中的内容
text_label.clear()
time.sleep(2)

# 输出搜索框元素是否可见
print(text_label.is_displayed())
# 输出placeholder的值
print(text_label.get_attribute('placeholder'))

# 定位搜索按钮
button = driver.find_element(By.ID, 'toolbar-search-button')
# 输出按钮的大小
print(button.size)
# 输出按钮上的文本
print(button.text)

'''输出内容
True
搜CSDN
{'height': 32, 'width': 88}
搜索
'''

セクション05 マウスコントロール

1. 要素をクリックします。

左键不需要用到 ActionChains

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains

driver = webdriver.Chrome()
driver.get("https://example.com")

element = driver.find_element_by_id("my_element")

# 单击元素
ActionChains(driver).click(element).perform()

2. 要素をダブルクリックします

# 双击元素
ActionChains(driver).double_click(element).perform()

3. 要素を右クリックします

# 右键单击元素
ActionChains(driver).context_click(element).perform()

4. 要素の上にマウスを移動します (マウスオーバー)。

模拟悬停的作用一般是为了显示隐藏的下拉框

# 鼠标悬停在元素上
ActionChains(driver).move_to_element(element).perform()

5. 要素を別の場所にドラッグします

# 拖拽元素到目标位置
target_element = driver.find_element_by_id("target_element")
ActionChains(driver).drag_and_drop(element, target_element).perform()

セクション06 キーボードコントロール

1. テキストを入力します

send_keys メソッドを使用して、ユーザーが手動で入力したかのようにアクティブな要素にテキストを入力します

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# 定位到文本输入框并输入文本
text_input = driver.find_element_by_id("my_textbox")
text_input.send_keys("Hello, World!")

2.ボタン

send_keys メソッドを使用して、Enter キー、Backspace キー、Tab キーなどの特定のキーの操作をシミュレートします。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://example.com")

# 模拟按下回车键
text_input = driver.find_element_by_id("my_textbox")
text_input.send_keys(Keys.ENTER)

3. キーの組み合わせ

Keys クラスを使用すると、Ctrl+C (コピー) や Ctrl+V (ペースト) など、キーボードのキーの組み合わせをシミュレートできます。 )。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()
driver.get("https://example.com")

# 模拟Ctrl+C(复制)
text_input = driver.find_element_by_id("my_textbox")
text_input.send_keys(Keys.CONTROL, 'c')

# 模拟Ctrl+V(粘贴)
another_text_input = driver.find_element_by_id("another_textbox")
another_text_input.send_keys(Keys.CONTROL, 'v')

4. その他のキーボード操作

操作する 説明する
キー.F1 F1キー
キー.スペース 空間
キー.TAB Tabキー
キー.エスケープ ESC
Keys.ALL Altキー
キー.SHIFT シフトキー
Keys.ARROW_DOWN 下矢印
Keys.ARROW_LEFT 左矢印
Keys.ARROW_RIGHT 右矢印
Keys.ARROW_UP 上矢印

セクション07 要素の待機

現在、ほとんどの Web アプリケーションは Ajax テクノロジーを使用しています。ページがブラウザに読み込まれるとき、ページ内の要素はさまざまな時点で読み込まれる可能性があります。これにより、要素を見つけることが困難になり、要素がページ上に存在しなくなった場合は、ElementNotVisibleException 例外がスローされます。 wait を使用すると、この問題を解決できます。 waits は、主に要素の位置決め、またはその要素に対するその他の操作など、いくつかの操作間の時間間隔を提供します。

Selenium Webdriver は、暗黙的と明示的な 2 種類の待機を提供します。明示的な待機により、WebDriver は特定の条件が満たされるまで待機してから実行されます。暗黙的な待機により、Webdriver は要素を検索する前に一定時間待機できます。

1. 暗黙的な待機

暗黙的な待機: グローバル待機時間を設定します。Selenium が要素をすぐに見つけることができない場合、指定された時間待機してから再試行します。これはテストプロセス全体に当てはまります

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10)  # 设置等待时间为10秒

driver.get("https://example.com")
element = driver.find_element_by_id("myElement")

2.ショー待機中

明示的な待機: 明示的な待機を使用すると、特定の操作に対する特定の条件を待機できます。要素が表示されたり、クリック可能になったりするまで待つことができます。

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

driver = webdriver.Chrome()
driver.get("https://example.com")

# 等待元素可见
element = WebDriverWait(driver, 10).until(
    EC.visibility_of_element_located((By.ID, "myElement"))
)

# 等待元素可点击
element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myElement"))
)

3.カスタマイズされた待機

カスタム待機: ニーズに応じてカスタム待機条件を作成することもできます。たとえば、要素のテキスト コンテンツが特定の値と等しくなるまで待つことができます。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

def wait_for_element_with_text(driver, by, value, text, timeout=10):
    return WebDriverWait(driver, timeout).until(
        lambda driver: driver.find_element(by, value).text == text
    )

driver = webdriver.Chrome()
driver.get("https://example.com")

# 等待元素文本内容等于特定值
wait_for_element_with_text(driver, By.ID, "myElement", "Hello, World!")

4. 強制待機

暗黙的待機を強制待機 (time.sleep() を使用) に変更することは、コードが非効率になり、時間を無駄にする可能性があるため、一般的には良い習慣ではありません。

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")  # 替换为你要访问的网页URL

# 假设你已经定位到了包含文本的 WebElement 对象
element = driver.find_element_by_css_selector("span.red-packet-icon-mini > span.num")

# 使用强制等待
time.sleep(5)  # 强制等待 5 秒

# 获取 <span> 元素的文本内容
text_content = element.text

# 打印文本内容
print(text_content)

值得一提的是,对于定位不到元素的时候,从耗时方面隐式等待和强制等待没什么区别

セクション08 スイッチング動作

Selenium がページを操作する際、リンクをクリックすると新しいページにジャンプする (新しいタブが開く) ことがありますが、このとき実際には Selenium は前のページにあるため、最新の要素を見つけるために切り替える必要があります。ページ。

ウィンドウの切り替えには switch_to.windows() メソッドを使用する必要があります。

1. ウィンドウの切り替え

Selenium がページを操作する際、リンクをクリックすると新しいページにジャンプする (新しいタブが開く) ことがありますが、このとき実際には Selenium は前のページにあるため、最新の要素を見つけるために切り替える必要があります。ページ。

ウィンドウの切り替えには switch_to.windows() メソッドを使用する必要があります。

from selenium import webdriver

handles = []
driver = webdriver.Chrome()
driver.get('https://blog.csdn.net/')
# 设置隐式等待
driver.implicitly_wait(3)
# 获取当前窗口的句柄
handles.append(driver.current_window_handle)
# 点击 python,进入分类页面
driver.find_element_by_xpath('//*[@id="mainContent"]/aside/div[1]/div').click()
# 切换窗口
driver.switch_to.window(driver.window_handles[-1])
# 获取当前窗口的句柄
handles.append(driver.current_window_handle)

print(handles)
print(driver.window_handles)

ここに画像の説明を挿入します
クリックしてジャンプした後、上記のコードは switch_to を使用してウィンドウを切り替えます。window_handles返される handle リストは次のとおりです。ページ上 出現時間順に並べ替える場合、最後に開いたページが最後になる必要があるため、driver.window_handles[-1] + switch_to を使用して最後に開いたページにジャンプできます。

複数のウィンドウが開いている場合、前に開いていたウィンドウに移動するにはどうすればよいですか?実際に必要な場合は、ウィンドウを開いたときに各ウィンドウを記録する必要がありますkey(别名)value(handle) を辞書に保存し、key に基づいて handle を取得します。

2. フォーム切り替え

1.iframeの切り替え

多くのページもフレーム/iframe フォームでネストされます。Selenium はそのような埋め込みページを直接見つけることができません。現在操作しているオブジェクトをフレーム/iframe 埋め込みページに切り替えるには、switch_to.frame() メソッドを使用する必要があります。

デフォルトでは、switch_to.frame() は直接位置決めに id または name 属性を使用できますが、iframe に ID または名前がない場合は、位置決めに xpath を使用する必要があります。

   iframe = driver.find_element(By.ID, "my-iframe-id")
   driver.switch_to.frame(iframe)

2. デフォルトのコンテンツに戻します。

iframe での操作の完了後にメイン ページに戻りたい場合は、switch_to.default_content() メソッドを使用できます。

   driver.switch_to.default_content()

これらのメソッドは、Selenium でウィンドウと iframe を切り替えるのに役立ちます。ウィンドウまたは iframe を切り替える前に、対応するウィンドウ ハンドルまたは iframe 要素を取得する必要があることに注意してください。

3. 例

具体的には、iframe 内にある要素を検索するには、次の手順に従う必要があります。

1. まず、iframe 要素自体を見つけて、その iframe に切り替える必要があります。

2. iframe 内では、通常のメソッドを使用して要素を検索および操作できます。

iframe に切り替えてその中の要素を検索する方法の例を次に示します。

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

# 找到 iframe 元素,可以根据其 ID、名称或其他属性来定位
iframe = driver.find_element(By.ID, "my-iframe-id")

# 切换到 iframe
driver.switch_to.frame(iframe)

# 在 iframe 中查找元素并执行操作
element_inside_iframe = driver.find_element(By.CLASS_NAME, "element-class")
element_inside_iframe.click()

# 切换回主页面
driver.switch_to.default_content()

この例では、まず ID を介して iframe 要素を見つけ、次に driver.switch_to.frame() / を使用して < に切り替えました。 a> を使用してメイン ページに戻ります。 で要素を見つけて操作を実行します。最後に、iframe をクリックし、iframedriver.switch_to.default_content()

iframe 要素が正しく見つかったことを必ず確認し、iframe に切り替えた後、driver.find_element() メソッドを使用して iframe 内の要素を見つけてください。

セクション09 ローラー操作

Selenium でホイール操作をシミュレートするには、ActionChains クラスの send_keys メソッドを使用して、Keys.PAGE_DOWN や Keys.SPACE などのキーをページに送信します。これにより、ページの下へのスクロールがシミュレートされます。

サンプル コードでは、ActionChains オブジェクトがすでに作成されているため、ループ内で send_keys メソッドを使用してホイール操作をシミュレートするだけで済みます。下へのスクロールをシミュレートするようにコードを変更する方法は次のとおりです。

from selenium.webdriver.common.keys import Keys

# ...

# 计算滚动的时间间隔(以毫秒为单位)
scroll_interval = 500  # 每500毫秒滚动一次

# 创建ActionChains对象
action_chains = ActionChains(driver)

# 模拟滚动
for _ in range(int(scroll_duration * 1000 / scroll_interval)):
    action_chains.send_keys(Keys.PAGE_DOWN).perform()
    time.sleep(scroll_interval / 1000)

このコードは、Page Down キーを押してページをスクロールすることをシミュレートします。必要に応じてscroll_intervalとscroll_durationを調整して、スクロールの速度と継続時間を制御できます。

要約する

メッセージを残したり、コメントを交換したり、批判したりすることができます。記事が役に立った場合、または著者の文章が優れていると思われる場合は、クリックしてフォロー、いいね、収集、サポートすることができます。
(ブログの参照ソース コードは、私のホームページのリソースにあります。学習プロセス中に質問がある場合は、コメント エリアで質問してください)あ>

おすすめ

転載: blog.csdn.net/HHX_01/article/details/134015413