1. セレンの概要
Selenium は、Web アプリケーションの機能とユーザー インターフェイスをテストするための一般的な自動テスト ツールです。クリック、テキストの入力、ドロップダウン ボックスの選択など、ブラウザでのユーザー操作をシミュレートし、ページ要素のステータスとプロパティを確認できます。Selenium は、テスターが反復的なテスト タスクを自動化し、テストの効率を向上させ、人的エラーを削減するのに役立ちます。
第二に、セレンの原理
この自動化プログラムでは、Selenium ライブラリに WebDriver クラスをインポートして WebDriver オブジェクトを作成し、Selenium クライアント ライブラリの対応する関数を呼び出してブラウザ ドライバ (ChromeDriver など) にリクエストを送信する必要があります。
WebDriver ドライバーを使用してコードを実行すると、WebDriver は命令を HTTP リクエストに変換し、ブラウザー ドライバーに送信します。
ブラウザ ドライバーは、Selenium ライブラリとブラウザを接続するブリッジであり、ブラウザと通信し、ブラウザを制御および操作するために作成したコードを実行します。
ブラウザ ドライバは、これらの HTTP リクエストを受信すると、それらをブラウザで実行可能な命令に変換し、その命令を実行のためにブラウザに送信します。実行が完了すると、ブラウザは結果をブラウザ ドライバに返し、ブラウザ ドライバは結果を HTTP 応答に変換してコード プログラムに返します。
3、Selenium の 8 つの要素の配置方法
Selenium の UI 自動化の鍵となるのは要素の配置であり、要素が配置されていれば、メソッドを呼び出して UI 要素を操作できると言えます。要素の配置方法を紹介する前に、配置コードが正しく記述されているかどうかを知る必要がありますが、このとき F12 の力が反映されます。
開発者ツールを起動し、要素を選択し、任意の要素をクリックして、Ctrl+F をクリックします。この検索ボックスでは、現在のページ上のすべての要素を検索し、要素を見つけたコードをコピーできます。検索結果で要素が見つかった場合は、要素を見つけるメソッドが正しく記述されていることが証明されます。
Selenium では要素の配置方法が 8 つあり、以下に紹介します。
1. ID の配置:
find_element(By.ID, 'Id属性值')
例:
id 属性値が kw の場合、コードは次のようになります。find_element(By.ID, 'kw')
CSS において id は Web ページの要素を識別するための重要な属性であり、id は一意であるため、検索対象の要素に id 値がある場合、ID で検索するのが非常に便利です。
2. 名前の位置付け:
find_element(By.NAME,'name属性值')
例:
name 属性値がリファラーの場合、コードは次のようになります。find_element(By.NAME,'referrer)
3. クラスの位置付け:
find_element(By.CLASS_NAME,'class属性值')
例:
クラス属性値は foot-async-script で、コードは次のとおりです。find_element(By.CLASS_NAME,'foot-async-script')
複数のクラス属性値がある場合、任意のクラス属性値を指定でき、この要素を選択できます
4. タグの配置:
find_element(By.TAG_NAME,'元素的标签值')
例:
タグ値が style の場合、コードは次のようになります。find_element(By.TAG_NAME,'style')
見つかった要素は一意ではないため、それを使用できますfind_elements(By.TAG_NAME,'style')
。find_element と find_elements の違いに注意してください。find_elements はリストを返します。
5. link_text の配置:
find_element(By.LINK_TEXT,'超链接文字')
例:
たとえば、Baidu のホームページ上のビデオはハイパーリンク テキストであり、コードは次のように記述できます。find_element(By.LINK_TEXT, '视频')
6. Partial_link_text の配置:
find_element(By.PARTIAL_LINK_TEXT,'超链接部分文字')
例えば、
ハイパーリンクのテキストが長すぎる場合、その一部だけを入力することもでき、要素を見つけることもできます。図に示すように、「Baidu、あなたは知っている - Mobile Homepage」の属性値は次のように記述できます。 : 、コード:移动首页
要素find_element(By.PARTIAL_LINK_TEXT, '移动首页')
を見つけるため
7. CSS の配置:
find_element(By.CSS_SELECTOR,'css值')
多くの場合、要素には ID がありません、クラス値、または属性値が一意ではありません。このとき、CSS セレクター構文を使用して要素を選択できます。CSS セレクターは、要素を見つけるために Web 開発で一般的に使用されるメソッドです。 HTML ドキュメント内の目的の要素を迅速かつ正確に検索できます。
(1) タグ名で要素を選択する
たとえば、div、p、a などのタグは、タグが div という名前のすべての要素を検索します。
find_elements(By.CSS_SELECTOR, 'div')
(2)クラス名classで要素を選択
構文は、クラス値の前に記号を追加することです.
。
例:
コードは次のとおりです。find_element(By.CSS_SELECTOR, '.foot-async-script')
(3) IDで要素を選択
構文は、ID 値の前に記号を追加することです#
。
例:
コードは次のとおりです。find_element(By.CSS_SELECTOR, '#result_tts_player')
(4) 属性による要素の選択
構文は[属性名=属性値]です。
例:
コードは次のとおりです。find_element(By.CSS_SELECTOR, '[name=theme-color]')
タグ名、ID 値、クラス名などと組み合わせて使用することもできます。find_element(By.CSS_SELECTOR, 'meta[name=theme-color]')
(5) サブ要素で選択
文法:元素1 > 元素2
要素 2 が要素内にある場合、次のようになります。
クラス属性 wgt-navbar はクラス属性 navbar-wrapper レベルの下にあり、サブ要素構文を使用して要素をより正確に見つけることができます。コードは次のとおりです。find_element(By.CSS_SELECTOR, '.navbar-wrapper > .wgt-navbar)
(6) 子孫要素による選択
文法:元素1 元素2
子要素と同様に、子孫要素も要素内にあります。違いは、子要素はその要素の直接の子要素のみであることができ、子孫要素は直接の子要素であることができないこと、子要素は子孫要素である必要があり、子孫要素は必ずしもそうではないことです。子要素。
たとえば、要素 a > 要素 b > 要素 c > 要素 d、要素 b は要素 a の子要素、要素 c は要素 b の子要素であるが子要素ではなく、要素 c は要素 a の子孫要素です。 。
例:
クラス属性 navbar-bg はクラス属性 wgt-navbar レベルの下にあり、wgt-navbar は navbar-wrapper の子要素であり、navbar-bg は navbar-wrapper の子孫要素です。次に、子孫要素構文を使用して要素をより正確に見つけることができます。コードは次のとおりです。find_element(By.CSS_SELECTOR, '.navbar-wrapper .navbar-bg)
8. XPathの位置決め
XPath 配置の利点は、柔軟かつ強力であり、要素属性、タグ名、階層関係、テキスト コンテンツなどの複数の特性に従って配置できることです。場合によっては、複雑な要素構造や特殊な要素を見つけるには、XPath ターゲティングの方が適している場合があります。ただし、XPath 式は CSS セレクターよりも複雑で、場合によってはより冗長になる場合があります。したがって、実際の使用では、特定の状況に応じて CSS セレクターまたは XPath 配置を使用して要素を配置することを選択できます。
XPath の位置決め方法は、絶対パスと相対パスに分類できます。
(1) 絶対パスの位置決め:
絶対パスはルート ノードから始まり、一連のノード パスを通過して要素を見つけます。絶対パスはルート ノードを示すスラッシュ / で始まり、ノード階層に従って段階的に配置されます。たとえば、/html/body/div[1]/input は、ルート ノードから開始し、最初に html 要素を選択し、次に body 要素を選択し、次に最初の div 要素を選択し、最後に input 要素を選択することを意味します。
(2) 相対パスの位置決め:
相対パスは、現在のノードを基準としたパスであり、より一般的に使用され、柔軟性があります。相対パスは二重スラッシュ // で始まります。これは、現在のノードの任意の位置から開始し、条件を満たす要素を選択することを意味します。たとえば、//input は、ドキュメント内の位置に関係なく、ドキュメント内のすべての入力要素を選択することを意味します。以下では、要素の属性、タグ名、階層関係、テキストの内容などの機能に基づいて要素を検索する方法について説明します。
//tagname : 指定されたタグ名を持つすべての要素を選択します
//tagname[@attribute='value'] : 指定された属性と属性値を持つ要素を選択します。
// [@attribute='value'] * : 指定された属性と属性値を持つ要素を選択します
//parent/child : 親要素の下にある直接の子要素を選択します。
//ancestor/descendant : 先祖要素の下にあるすべての子孫要素を選択します。
// [text()='value'] * : 指定されたテキスト内容を持つ要素を選択します。
XPath 位置決め方法は、論理演算子と複数の条件を使用した位置決めもサポートしています。たとえば、and または not を使用して、複数の条件を組み合わせることができます。
第四に、セレンの共通要素操作
click():要素をクリックします。
send_keys(value):テキストを入力ボックス要素に送信します。
clear():入力ボックス要素のテキストをクリアします。
get_attribute(name):要素の指定された属性値を取得します。
is_displayed():要素が表示されるかどうかを判断します。
is_enabled():要素が使用可能かどうかを判断します。
is_selected():要素が選択されているかどうかを判断します。
五、例
要件: Baidu 検索から Weibo に入り、Weibo ホット検索データを取得し、txt ファイルに出力します。
python
复制代码
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class test(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.get('https://www.baidu.com/')
#self.driver.get('https://weibo.com/')
self.driver.implicitly_wait(10) #`全局等待` 该方法接受一个参数, 用来指定最大等待时长
self.driver.maximize_window() #最大化浏览器页面
def baidu_search(self):
self.driver.find_element(By.ID,'kw').send_keys('微博') #通过id值定位
self.driver.find_element(By.CSS_SELECTOR,"[value=百度一下]").click() #通过CSS选择器定位
self.driver.find_element(By.PARTIAL_LINK_TEXT,'微博-随时随地发现新鲜事').click() #通过超链接定位
for handle in self.driver.window_handles: #不断切换窗口至我们想要的窗口:Sina
# 先切换到该窗口
self.driver.switch_to.window(handle)
# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
if 'Sina' in self.driver.title:
# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
break
def get_weibo_hot_search(self):
time.sleep(10)
hot_search_list = self.driver.find_elements(By.XPATH, '//*[@class="wbpro-textcut f14 cla"]')
print(len(hot_search_list))
print(hot_search_list)
for list in hot_search_list:
hot_search_text=list.text
self.save_data(hot_search_text)
def save_data(self, hot_search_text):
with open(r'C:\Users\User\Desktop\output.txt', 'a', encoding='utf-8', newline='') as f: # 用追加的方式将数据保存到txt文件中
# for number,hot_search_text in hot_search.items():
f.write(hot_search_text+'\n')
def main(self):
self.baidu_search()
self.get_weibo_hot_search()
self.driver.quit()
if __name__ == '__main__':
ceshi = test() # 实例化对象
ceshi.main() # 调用类函数入口
余談
テクノロジーが急速に成長するこの最初の年において、プログラミングは多くの人にとって無限の可能性の世界へのチケットのようなものです。数あるプログラミング言語の中でも、Python はトップスターのような存在で、その簡潔でわかりやすい構文と強力な機能により、世界で最も人気のあるプログラミング言語の 1 つとなっています。
Python の急速な台頭は業界全体にとって非常に有益ですが、「人红是非多
」のせいで多くの批判が加えられていますが、それでもその熱い開発の勢いを止めることはできません。
Python は今後 10 年間、関連性があり、そのままの状態であり続けるでしょうか? 今日は事実を分析し、いくつかの誤解を払拭していきます。
Python に興味があり、Python を学習してより高い給与を獲得したい場合は、次の Python 学習教材セットが役立つはずです。
教材には、Python インストール パッケージ + アクティベーション コード、Python Web 開発、Python クローラー、Python データ分析、人工知能、機械学習、その他の学習チュートリアルが含まれます。基礎0の初心者でもわかりやすく、チュートリアルに沿って基礎0から体系的にPythonを学べます!
1.Pythonの全方位学習ルート
Python の全方位ルートは、Python の一般的に使用される技術的なポイントを整理して、さまざまな分野の知識ポイントをまとめることです。その有用性は、上記の知識ポイントに応じて、対応する学習リソースを見つけて確実に学習できることにあります。より包括的に。
2.Python学習ソフト
労働者が良い仕事をしたいなら、まず道具を研ぐ必要があります。Pythonを学ぶのによく使われる開発ソフトはこちら!
3. Python入門学習ビデオ
基礎0から始めるのに適した学習動画も多数あり、これを読めば簡単にPythonを始められますよ~
4. Python の演習
各ビデオレッスンの後には、対応する練習問題があり、学習結果をテストできます。
五、Python実戦事例
光学理論は役に立ちません。光学理論に沿ってコードを入力することを学び、学んだことを実際に適用する必要があります。このとき、いくつかの実践的な事例から学ぶことができます。こんな情報も載ってますよ~
6. Python インタビュー資料
Python を学んだ後は、そのスキルを活かして仕事を見つけることができます。以下の面接の質問はすべて、Ali、Tencent、Byte などのトップインターネット企業からのものであり、Ali の上司も権威ある回答をしています。この一連の面接資料を読めば、誰もが満足のいく仕事を見つけることができると思います。
7. 情報収集
上記完全版Pythonの学習教材一式はCSDN公式サイトにアップロードされており、必要な方は以下のCSDN公式認定資格のQRコードをWeChat上でスキャンすることで無料で入手できます。