2017-04-24 4 views
1

を見つけていない私は、このウェブサイトをこすりしようとしている:は、セレンを使用してウェブスクレイピング - Elementは

https://www.novanthealth.org/home/patients--visitors/locations/clinics.aspx?behavioral-health=yes

私はクリニックの名前とアドレスを取得したい、これは私が

を使用しているPythonコードであります
from selenium import webdriver 
import pd 
import time 

#driver = webdriver.Chrome() 
specialty = ["behavioral-health","dermatology","colon","ear-nose-and- throat","endocrine","express","family-practice","foot-and-ankle", 
      "gastroenterology","heart-%26-vascular","hepatobiliary-and-pancreas","infectious-disease","inpatient","internal-medicine", 
      "neurology","nutrition","ob%2Fgyn","occupational-medicine","oncology","orthopedics","osteoporosis","pain-management", 
      "pediatrics","plastic-surgery","pulmonary","rehabilitation","rheumatology","sleep","spine","sports-medicine","surgical","urgent-care", 
      "urology","weight-loss","wound-care","pharmacy"] 
name = [] 
address = [] 

for q in specialty: 
    driver = webdriver.Chrome() 
    driver.get("https://www.novanthealth.org/home/patients-- visitors/locations/clinics.aspx?"+q+"=yes") 
    x = driver.find_element_by_class_name("loc-link-right") 
    num_page = str(x.text).split(" ") 
    x.click() 

    for i in num_page: 
     btn = driver.find_element_by_xpath('//*[@id="searchResults"]/div[2]/div[2]/button['+i+']') 
     btn.click() 
     time.sleep(8) #instaed of this use waituntil #  
     temp = driver.find_element_by_class_name("gray-background").text 
     temp0 = temp.replace("Get directions Website View providers\n","") 

     x_temp = temp0.split("\n\n\n") 

     for j in range(0,len(x_temp)-1): 
      temp1 = x_temp[j].split("Phone:") 
      name.append(temp1[0].split("\n")[1]) 
      temp3 = temp1[1].split("Office hours:") 
      temp4 = temp3[0].split("\n") 
      temp5 = temp4[1:len(temp4)] 
      address.append(" ".join(temp5)) 
    driver.close() 

私は一度に一つだけの専門のためにそれを使用している場合、このコードは正常に動作しますが、私は上記のようなループで料理を渡すとき、コードがエラーを有する第二の反復で失敗します。

Traceback (most recent call last): 
File "<stdin>", line 10, in <module> 
File "C:\Anaconda2\lib\site- packages\selenium\webdriver\remote\webelement.py", line 77, in click self._execute(Command.CLICK_ELEMENT) 
File C:\Anaconda2\lib\sitepackages\selenium\webdriver\remote\webelement.py", line 493, in _execute return self._parent.execute(command, params) 
File "C:\Anaconda2\lib\site-packages\selenium\webdriver\remote\webdriver.py",  line 249, in execute self.error_handler.check_response(response) 
File "C:\Anaconda2\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 193, in check_response 
    raise exception_class(message, screen, stacktrace) 
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible 
(Session info: chrome=46.0.2490.80) 
(Driver info: chromedriver=2.19.346078 (6f1f0cde889532d48ce8242342d0b84f94b114a1),platform=Windows NT 6.1 SP1 x86_64 

私のpythonを使用して多くの経験を持っていない、任意のヘルプは、それが動作しない理由エラーメッセージがあなたに伝えていた

+0

対応するelemがページに表示されるまで、数秒待つようにWebドライバを作成する必要があります。 webdriver_wait関数を見てください。 –

+0

私はすでにそのドキュメントを読んでいましたが、それを実装するいくつかの問題に直面していました。サンプルコードを付けることはできますか?ありがとう! – Vaibhav

+0

はここにあるhttp://stackoverflow.com/a/41832157/3297613 –

答えて

1

理解されるであろう。あなただけの簡単ですソースページからデータを抽出し、お使いのブラウザのサイズに応じて

OR

をリストを下にスクロールする必要が

ElementNotVisibleException: Message: element not visible

The element is not visible if you do not scroll down to see it.

1

通常、私はExcelのプラグインであるSelenium Basicで行います。 Pythonでは同じロジックを使うことができます。これはVBAで試され、うまく動作します。

Private assert As New assert 
Private driver As New Selenium.ChromeDriver 

Sub sel_novanHealth() 
Set ObjWB = ThisWorkbook 
Set ObjExl_Sheet1 = ObjWB.Worksheets("Sheet1") 
Dim Name As Variant 

    'Open the website 
    driver.get "https://www.novanthealth.org/home/patients--visitors/locations.aspx" 

    driver.Window.Maximize 

    driver.Wait (1000) 

    'Find out the total number of pages to be scraped 
    lnth = driver.FindElementsByXPath("//button[@class='paginate_button']").Count 
    'Running the Loop for the Pages 
    For y = 2 To lnth 
      'Running the Loop for the Elements 
      For x = 1 To 10 
       Name = driver.FindElementsByXPath("//div[@class='span12 loc-heading']")(x).Text 
       ' Element 2 
       'Element 3 
      Next x 
       driver.FindElementsByXPath("//button[@class='paginate_button']")(y).Click 
    Next y 

     driver.Wait (1000) 


End Sub 
関連する問題