2016-12-28 2 views
3

Я использую Phantomjs в селене, чтобы очистить данные по ссылке, указанной в фрагменте. Извлекая данные с element.text в phantomjs (web_element), я получаю несколько пустых значений между ними, где, как если бы я использовал хромированный рекордер, я смог очистить все данные.Очистка данных в сети с использованием PhantomJS и Selenium

Я могу работать только с помощью обезглавленный браузера, так как я бегу его в сервер 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
Бедра (INCHES) 36 38 40 42,5 45,25 48 50,75
31 41,75 # most Element is mis петь/не умеет царапать ???
Бюст (дюймы) 34,25 36,25 38 40 43,75 46,5 49,25

Фактическая таблица: Size Chart

+0

Может быть, время ожидания слишком короткая. Попробуйте 'driver.implicitly_wait (30)' –

+0

Я уже пробовал с этим ... и это не мой вопрос –

ответ

1

интересная проблема. Использование textContent будет реально работать в этом случае:

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

Различие между .text, textContent и другими свойствами прекрасно описано здесь:

Обратите внимание, что нет смысла звонить в implicitly_wait() несколько раз - i т не действует как time.sleep() - значит, он не будет ждать в течение определенного промежутка времени сразу - вместо этого, было бы только драйверу установить «неявное ожидание» на указанное количество секунд:

An неявное ожидание - сказать WebDriver, чтобы опросить DOM в течение определенного времени, пытаясь найти элемент или элементы, если они не доступны сразу.

Лучшим способом подождать в этом случае будет использование Explicit Waits.

+0

Вы спасли моего приятеля ... это действительно работает .... –

+0

С нетерпением жду, чтобы узнать, почему это произошло .... @alecxe –

+0

@ DineshSingh все еще не уверен, почему '.text' не смог получить текст нескольких ячеек. Сама таблица выглядит довольно нормально - все элементы 'td' имеют текстовые узлы и не отличаются друг от друга. Угадайте, что это в значительной степени «PhantomJS». – alecxe

0

Я думаю, что нашел ответ/причину этого.

Спасибо за ваш повтор @alecxe, я нашел здесь свой ответ ...

свойство textContent является «унаследованным» от интерфейса узла спецификации DOM Core. Текстовое свойство «унаследовано» из интерфейса HTML5 HTMLAnchorElement и указано как «должно возвращать то же значение, что и атрибут IDL textContent».

Эти два, вероятно, сохранены для сближения разных действий браузера, свойство text для элементов сценария определено несколько иначе.

Обратите внимание, что спецификация DOM является общей спецификацией для любого документа (например, HTML, XML, SGML и т. Д.), Тогда как HTML5 специально предназначен для HTML, который использует и расширяет DOM Core во многих отношениях (некоторые могут сказать, что это «супер набор» нескольких спецификаций DOM плюс HTML плюс ...).

Обратите внимание, что «в наследство» не означает «прототип наследства», только более общий смысл унаследовали

Опять Спасибо за это ...

Difference between text and textContent properties

Смежные вопросы