Python + Selenium + Splinter + Firefoxを使用してインタラクティブなWebクローラーを作成しています。
Pythonスクリプトがオプションを提供し、SeleniumがFirefoxを開いて、いくつかの注文を送信します。
今のところ、ユーザーが操作したいWeb要素をPythonスクリプトに知らせる必要があります。
方法私が現在使用しては以下のとおりです。
Webサイト(Firefox)でアイテムを右クリックし、[要素の検査]をクリックしてから、Firefoxインスペクターをクリックし、[HTMLのコピー]をクリックして、スクリプトに手動でフィードすると、続行できるようになります。
しかし、明らかな理由から、このプロセスは完璧にはほど遠いと感じています。
私はjavascriptについて何も知りませんが、他の質問を読んだ後、javascriptが実際に解決策になる可能性があると感じました。
Splinterを使用すると、JavaScriptを実行し、戻り値をPythonスクリプトに取り込むことができるため、理論的には次のようになります。
ユーザーがクリックする次の要素のhtmlコードを返すjavascriptコードを実行することは可能でしょうか?したがって、名前付きメソッドは、目的の要素を右クリックするだけでしょうか?
アミーのコメントの明確化:
PythonスクリプトはFirefoxウィンドウを開きますが、その制御は引き続きスクリプトから保持されます。また、splinterを使用すると、javascriptコードを実行して、完了/情報が返されるまで待機できます。つまり、Pythonスクリプトは、所有しているFirefoxウィンドウでクリックまたは右クリックするようにユーザーに求めることができるため、ユーザーがクリックした要素を「キャッチ」するJavaScriptを起動することが目的になります。
javascriptが目的の要素をキャッチするにはそれで十分でしょうか?
これは興味深い質問でした。私の戦略は、Javascriptを使用して、ターゲットとする要素にリスナーを追加することでした。要素の種類を指定しなかったので、リンクを使用しました。ただし、これは簡単に適応できます。
要素がクリックされると、リスナーは指定したIDで新しいページ要素を作成し、value属性を関連情報に設定します。
次に、driver.implicitly_waitを設定したとすると、要素が表示されるのを待つことができます。
driver.execute_script("for(var i = 0; i < document.links.length; i++){document.links[i].onclick = function clicked(){var e = document.createElement('a'); e.setAttribute('id','myUniqueID'); e.setAttribute('value', this); document.getElementsByTagName('body')[0].appendChild(e);};}")
clicked = driver.find_element_by_id('myUniqueID').get_attribute('value')
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加