2017-11-01 5 views
1

ドロップダウンから値を選択してgoボタンをクリックするたびに、このページからすべてのURLを取得する必要があります。セレンを使用せずにドロップダウンオプションから値を選択してデータを取得する方法

xpathを使用してドロップダウンオプションから値を選択しました。しかし、私は行くボタンをクリックすることができません。

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

import requests 
from lxml.html import fromstring 
req = requests.get('http://www.questdiagnostics.com/testcenter/BUSearch.action?submitValue=BUSearch&keyword=Toxoplasma+Abs+IgG+%2F+IgM') 
hdoc = lxml.html.fromstring(req.content) 
hdoc.xpath('//select[@id="labs"]/option/text()') 

セレンを使用せずにすべてのリンクを取得する方法は?

答えて

2

通常のユースケース

lxmlは素晴らしいライブラリであり、それは記入し、フォーム、as documented hereを提出するためのまともなサポートしています。この特定のユースケースの実際の課題は、フォームが動作する方法に根ざしています。

地域ラボ選択ボックスはフォームの一部ではありません。その値はクッキーで送信されます。これは物事を少し難しくします。

これが当てはまらない場合は、GETを発行してフォームを抜き出し、興味のある値を変更して送信し、戻ってくるリンクを調べてください。あなたがlxml.html.submit_form()を呼び出すときに、私は任意のクッキーを追加する方法が表示されない、任意のリクエストパラメータを追加することができますが

req = requests.get('http://www.questdiagnostics.com/testcenter/BUSearch.action?submitValue=BUSearch&keyword=Toxoplasma+Abs+IgG+%2F+IgM') 
hdoc = lxml.html.fromstring(req.content) 
form = hdoc.forms[1] 

# Set form inputs using `form.fields = dict(...)` 

form.action = "http://www.questdiagnostics.com" + form.action 
submitResult = lxml.html.parse(lxml.html.submit_form(form)).getroot() 
links = submitResult.xpath('//*[@id="maincolumn"]/ol/li/a[@class="title"]/@href') 

:このスクリプトは次のようになります。

このユースケース、本質的には、(ラボを識別するために、追加のクッキーで)自分自身に戻ってリダイレクトすることで動作します。このフォームは、あなたは自分の初期にクッキーを追加することで、この動作をシミュレートする可能性があるので、言っ

GET。あなたは、フォーム提出でまったく混乱する必要はないかもしれません。呼び出し、あなたはさらに一歩これを取る、とラボのリストを取得していないクッキーとGETを発行し、そのリストを反復処理することができ

cookies = dict(TC11SelectedLabCode='SKB') 
req = requests.get('http://www.questdiagnostics.com/testcenter/BUSearch.action?submitValue=BUSearch&keyword=Toxoplasma+Abs+IgG+%2F+IgM', cookies=cookies) 
hdoc = lxml.html.fromstring(req.content) 
links = hdoc.xpath('//*[@id="maincolumn"]/ol/li/a[@class="title"]/@href') 
print(links) 

:このスクリプトは、SKBラボのための最初の10件のリンクが表示されますrequests.get()それぞれに、適切なTC11SelectedLabCodeクッキーを送信してフォーム提出をシミュレートします。 lxmlはまともなフォームの送信をサポートしている一方で、あなたは実際には何もクリックしていないことを

ノート

注意。 DOMに "人生を呼吸する"ものは何もありません。 ページ上のjavascriptは実行されていません。

これがなぜ重要なのかを説明するために、この例を検討してください。結果の2ページ目のリンクを確認したい場合は、その結果をどのように達成するかは言えません。テストでページ上でJavaScriptを実行する必要がある場合は、requestslxml以上が必要です。

+0

ありがとう。それは私のために働いています。 –

関連する問題