私は、Webページの名前を解析するために、Pythonでセレントと組み合わせてスクリプトを書いています。そのサイトからのデータはJavaScriptが有効になっていません。ただし、次のページのリンクはjavascript内にあります。 requests
ライブラリに行くと、そのWebページの次のページリンクは役に立たないので、25ページを横断してそのサイトのデータを解析するためにセレンを使用しました。私がここで直面している唯一の問題は、私のスクレーパーが25ページをクリックして最後のページに到達することができますが、それは最初のページからのみデータを取得することです。さらに、最後のページをクリックしたにもかかわらずスクレーパーは稼働し続けます。次のページのリンクは、javascript:nextPage();
のようになります。 Btw、私は次のページボタンをクリックしても、そのサイトのURLは変更されません。どのように私は25ページからすべての名前を得ることができますか?私のスクレーパーで使用したCSSセレクターは完璧です。前もって感謝します。ここでScraperが次のページから名前を取得できません
は、私が書いたものです:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://www.hsi.com.hk/HSI-Net/HSI-Net?cmd=tab&pageId=en.indexes.hscis.hsci.constituents&expire=false&lang=en&tabs.current=en.indexes.hscis.hsci.overview_des%5Een.indexes.hscis.hsci.constituents&retry=false")
while True:
for name in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table.greygeneraltxt td.greygeneraltxt,td.lightbluebg"))):
print(name.text)
try:
n_link = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[href*='nextPage']")))
driver.execute_script(n_link.get_attribute("href"))
except: break
driver.quit()
をあなたはそれを私にビート...私は最初のビットが動作するとは思いませんなぜならあなたはSeleniumを使って目に見えない要素に対して 'get_attribute()'を実行できないからです。私は彼がJSEを使うことを提案しようとしていた。 '.execute_script("あなたのケースでは、引数を返す.innerText "、name)' – JeffC
@ JeffC、 'text'プロパティは隠し要素の内容を取得することを許可していません。 'get_attribute( 'textContent')' [この目的のためにうまくいく](https://stackoverflow.com/questions/43429788/python-selenium-finds-h1-element-but-returns-empty-text-string/43430097# 43430097) – Andersson
このような堅牢なソリューションのおかげでAndersson氏。いつかあなたが無敵だったので解決するのは難しい問題を思いつきます。再度、感謝します。 – SIM