Selenium を使用して Python で webcrawler を構築しています。以下は、リンクを検索する関数です。コメントアウトされた部分を除いて、正常に動作します。アイデアは、調査中のページで見つかった各リンクにカーソルを合わせるというもので、そのホバリング アクションによってさらに多くのリンクが表示された場合 (たとえば、Javascript で作成されたドロップダウン メニューなど)、getLinksFromHTML ( 「if code != 1」の部分は、再帰呼び出しが 1 つだけであることを確認するためのものです)。
ただし、JSドロップダウンメニュー内にリンクがあるページでテストすると、再帰呼び出しは新しいリンクを取得しません(私が見ているページはhttp://wilmingtontaxesandaccounting.comです)。表示されているリンクはすべて正常に取得されます。
Selenium がこれらのドロップダウン リンクを認識できるようにするにはどうすればよいですか? 一般的な解決策が必要です。つまり、特定の要素 ID や、コードにハードコードされたページ固有のものは必要ありません。読んでくれてありがとう!
def getLinksFromHTML(currUrl, code):
ListlinkerHref = browser.find_elements_by_xpath("//*[@href]")
links1 = []
links2 = []
for link in ListlinkerHref:
url = link.get_attribute("href")
#hov = ActionChains(browser).move_to_element(link)
#hov.perform()
#if code != 1:
#links1 = self.getLinksFromHTML(currUrl, 1)
if url not in links1:
links2.append(url)
return links1 + links2