2016-12-28 86 views
3

我正在使用Phantomjs在硒中從摘錄中給出的鏈接刮取數據。在用phantomjs(web_element)中的element.text提取數據時,我得到了一些空白值,就像我使用chromedriver那樣,我能夠刪除所有數據。使用PhantomJS和硒刮取網頁數據

我只能運行使用無頭的瀏覽器,因爲我在AWS Linux服務器

運行它,我怎麼能刮中的所有數據,而不會錯過使用phantomjs。這裏期待一些幫助......謝謝你提前

下面是連接

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
from selenium.common.exceptions import NoSuchElementException 
dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] = (
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/53 " 
    "(KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36") 
driver = webdriver.PhantomJS(desired_capabilities = dcap,service_args=['--ignore-ssl-errors=true', '--load-images=false']) 
driver.get("http://www.myntra.com/Dresses/Casual-Collection/Casual-Collection-by-Debenhams-Purple-Floral-Print-Maxi-Dress/348207/buy") 
driver.implicitly_wait(5) 
try: 
    driver.find_element_by_class_name("size-buttons-show-size-chart").click() 
    driver.implicitly_wait(10) 
    div_s = driver.find_elements_by_class_name("size-chart-cell") 
    # div_s = driver.find_elements_by_xpath("""//*[@id="mountRoot"]/div/div/div/div[3]/div/div[2]/div[1]/table/tbody/tr""") 
    size_data = '' 
    for s in div_s: 
     print str(s.text) 
except NoSuchElementException: 
    print "NoSuchElementException" 

修改輸出的片段:

尺寸XS SML XL XXL 3XL
品牌大小UK10 UK12 UK14 UK16 UK18 UK20 UK22
臀圍(英寸)36 38 40 42.5 45.25 48 50.75
31 41.75#大多數元素是錯誤的唱/不能刮?
胸圍(英寸)34.25 36.25 38 40 43.75 46.5 49.25

實際的表是: Size Chart

+0

也許等待的時間太長短。嘗試'driver.implicitly_wait(30)' –

+0

我已經試過這個...這不是我的問題 –

回答

1

有趣的問題。使用textContent實際上在這種情況下工作:.texttextContent和其他屬性之間

for s in div_s: 
    print(str(s.get_attribute("textContent"))) 

的差異在這裏完美地描述:

注意,有多次撥打implicitly_wait()沒有意義 - 我t不與作爲time.sleep() - 這意味着,它不會等待立即一定的時間 - 相反,它只會指示司機到「隱等待」設置爲指定的秒數:

的隱式的等待是告訴WebDriver在嘗試查找一個或多個元素(如果它們不是立即可用的)時輪詢DOM一段時間。

在這種情況下等待的更好方法是使用Explicit Waits

+0

你救了我的一天夥計...這真的有效.... –

+0

熱切期待知道爲什麼發生了.... @alecxe –

+0

@DineshSingh仍然不確定爲什麼'.text'無法檢索多個單元格的文本。表本身看起來很正常 - 所有'td'元素都有文本節點,它們彼此沒有區別。猜猜這是非常''PhantomJS'具體.. – alecxe

0

我想我找到了它背後的答案/原因。

感謝您的回放@alecxe我在這裏找到了我的答案......

textContent屬性與DOM Core規範的Node接口「無關」。 文本屬性從HTML5 HTMLAnchorElement接口「繼承」,並被指定爲「必須返回與textContent IDL屬性相同的值」。

這兩者可能會保留以匯聚不同的瀏覽器行爲,腳本元素的文本屬性的定義稍有不同。請注意,DOM規範是任何類型文檔(例如HTML,XML,SGML等)的通用規範,而HTML5專門用於在許多方面利用並擴展DOM Core的HTML(有些人可能會說它是一些DOM規格的「超集」加上HTML加...)。

需要注意的是「繼承」並不意味着「原型繼承」,只是繼承

再次感謝你爲這個更一般的意義......

Difference between text and textContent properties