私はSeleniumとそのPythonバインディングを使用して、LinkedInのWebScrapeから研究プロジェクトを行っています。私は人々のプロフィールを書き留める。SeleniumがLinkedIn回転円を明示的に待ちます
LinkedInでは、ユーザープロファイルを読み込むと、サイトは経験と教育が完全に読み込まれるまで回転サークルを置きます。 HTMLソースコード、経験と教育のセクションを得るために、回転サークルが消えるまでSeleniumが待つようにします。
私の質問は次のとおりです。LinkedInスピンサークルを明示的に待つようにコードを書くにはどうしたらよいですか?
編集:より正確な質問は次のようになります:旋回円のロケータを取得するにはどうすればよいですか? ブラウザの開発ツールからこれを行う時間はありません。彼らはあまりにも速く消える
EDIT 2:別のポイント。人は教育課を持っていてもいなくてもよい。クリックするか、そうでなければ存在する教育セクションをチェックすることは解決策ではありません。教育部門がない(教育部門をDOMに入れていないLinkedInに関する情報を入力していない)、またはまだロードされていないため、教育部門は存在しない可能性があります(スピンサークルがあります)。私はそれがどれであるかを知りたい。 2番目の理由(回転円がある)なら、私は待っています。 (セクションはeducation-section
というクラスのdiv
です)。同じことが経験に当てはまる
ここはこの質問の目的のためのプロジェクトの中核です。
これらは、クラス内の2つの関数です。 self.getBrowser()
WebDriverオブジェクトを返します。明快さと簡潔さのために、私は2つの関数の中のコードを含む非面白い部分をカットしているので、現実には使われていないと思われる引数があります。残りの変数が自己説明的であることを願っています。
def waitForPresenceCondition(self, by, value, sleep = True, check_for_404 = True):
try:
condition = EC.visibility_of_element_located((by, value))
WebDriverWait(self.getBrowser(), self.wait_timeout).until(condition)
except TimeoutException:
logging.critical("Timed out waiting for page element. Fatal. Exiting")
raise
except:
logging.error("Unexpected exception waiting for page element. Exiting")
raise
else:
logging.debug("Element found in URL")
# Scrape an organization
def scrape(self, url):
self.getBrowser().get(url)
try:
self.waitForPresenceCondition(By.CLASS_NAME, "pv-profile-wrapper")
except Error404:
logging.info("waitForPresenceCondition raised 404 error. Returning False")
return False
#INSERT HERE EXPLICIT WAIT FOR THE SPINNING CIRCLES
問題は次のとおりです:どのように旋回円のロケータを取得できますか?ブラウザのdelevopmentツールからこれを行う時間はありません。それらはあまりにも速く消えます – raffamaiden
'div'で囲まれた要素に' click() 'しようとすると、' org.openqa.selenium.WebDriverException:要素がポイントでクリックできません411,675)。他の要素はクリックを受け取ります:ここではターゲットdiv'のHTMLが来ます。あなたはセレクタを作るために例外から 'HTML'サンプルを使うことができます – Andersson
もっと具体的にすることができますか?プロファイルをロードすると、回転円が得られます。しばらくしてから、それらのスピンしているサークルは自分たちで離れます(おそらくそれはすべてAJAX経由で処理されます)。 「時間がたつと変わっていますが」、開発ツールからスピンしているサークルを選択し、セレクタとして使うことができる独自のクラスやIDがあるかどうかを確認するだけでは不十分です – raffamaiden