2017-06-21 8 views
1

私はWebサーバーをテストするためにPythonでseleniumを使用しています。私が必要とするのは、入力テキストにテキストを入力し、ボタンをクリックしてサーバーにメッセージを送信し、新しいWebページを開くことです。ここで
selenium:ボタンをクリックした後にページソースコードを取得する方法

は私のコードは次のとおりです。

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

driver = webdriver.Chrome() 
driver.get("http://www.example.com") 
txt = driver.find_element_by_id('input-text') 
txt.clear() 
txt.send_keys('some messages') 
btn = driver.find_element_by_id('input-search') 
btn.click() 
# How to print the source code of the new page here? 
# I think it should be as below but I don't know how to do it: 
# driver.get("new link") <---- How to get the new link? 
# print(driver.page_source.encode('utf-8')) 

私は上記のPythonコードを実行すると、すべてが正常に動作します:

www.example.com is opened.
The some messages are filled in the input-text.
The button input-search is clicked.
The new web page is opened.

今、私は新しいのページのソースコードを印刷する必要がありますウェブページはボタンをクリックして開きますが、これを行う方法はわかりません。

print(driver.page_source.encode('utf-8'))新しいウェブページではなく、www.example.comのソースコードを私に提供します。

答えて

1

新しいページが新しいタブまたはウィンドウにロードされている場合は、あなたが最初にこの新しいウィンドウにセレンのコンテキストを変更する必要があります。

driver.switch_to_window(driver.window_handles[1])

次のステップは、新たなまで待つことですコンテンツがロードされ、その後、あなたがコードを入手することができます:あなたは新しいページが、その後にロードするのを待つ必要があります

print(driver.page_source.encode('utf-8'))

+0

「IndexError:リストインデックスが範囲外です。」というエラーが表示されました。申し訳ありませんが、私はあなたを誤解します。クリックのアクションは別の新しいページを開くのではなく、古いページを新しいページに置き換えます。 – Yves

+0

その場合、あなたのコードは私には良いようです。新しいページが読み込まれるまで待つだけかもしれません。 – VMRuiz

+0

ohh ...あなたはそうです:Dしかし、私は 'switch_to_window'が他の人にとっては大いに役立つと思います。だから私はあなたの答えを受け入れる。あなたが望むなら、あなたの答えを編集することができます。 – Yves

0

。 Webページの作成方法に応じて、要素が表示されるまで待ってから、driver.page_sourceを使用してページの内容を変数にダンプする必要があります。または、ページに到達するためにボタンをクリックする必要がない場合は、driver.get(url)だけで、ページの読み込みが完了した後にそのページに依存することができます。

関連する問題