Итак, первый вопрос
Есть следующий html:
<div class="y6"> <span id=":pi">text1</span> <span class="y2"> - text2</span> </div>
Как получить доступ к любому из span элементов по тексту text1 или text2?
Отправлено 04 октября 2010 - 19:41
<div class="y6"> <span id=":pi">text1</span> <span class="y2"> - text2</span> </div>
Отправлено 04 октября 2010 - 22:08
<div class="y6"> <span id=":pi">text1</span> <span class="y2"> - text2</span> </div>
Как получить доступ к любому из span элементов по тексту text1 или text2?
Отправлено 05 октября 2010 - 07:08
//span[. = 'text1' ]здесь текст span должен содержать 'text1'
//span[contains(., 'text1')]здесь текст span должен быть точно совпадать с text1, но при этом будут игнорироваться пробелы и табуляции
//span[normalize-space(.) = 'text1']или
//*[. = 'text1' ] //*[contains(., 'text1')] //*[normalize-space(.) = 'text1']
Отправлено 05 октября 2010 - 07:33
Отправлено 11 октября 2010 - 14:59
Отправлено 11 октября 2010 - 19:44
На мой взгляд более правильно было бы все-таки пользоваться функцией text(), а не точкой. Если не ошибаюсь, то точка это аналог current(). А нужно проверять current()/text().Еще варианты
Здесь ищет любой элемент span текст которого точно совпадает с 'text1'//span[. = 'text1' ]здесь текст span должен содержать 'text1'//span[contains(., 'text1')]здесь текст span должен быть точно совпадать с text1, но при этом будут игнорироваться пробелы и табуляции//span[normalize-space(.) = 'text1']или
здесь тоже самое, но элемент может быть любой, не обязательно span//*[. = 'text1' ] //*[contains(., 'text1')] //*[normalize-space(.) = 'text1']
надеюсь, нигде не наврал...
Вот здесь есть хорошие примеры, как работать с XPath: XPath Tutorial
<?xml version="1.0"?> <?xml-stylesheet type="text/xml" href="#stylesheet"?> <!DOCTYPE root [ <!ATTLIST xsl:stylesheet id ID #REQUIRED> ]> <root> <xsl:stylesheet version="1.0" id="stylesheet" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method='html'/> <xsl:variable name='txt' select='"text2"'/> <xsl:template match='/'> <hr/> <xsl:value-of select='name(//*[.=$txt])'/> <hr/> <xsl:value-of select='name(//*[./text()=$txt])'/> <hr/> </xsl:template> </xsl:stylesheet> <!-- END of XSL --> <div> <span>text1</span> <span>text2<b>BOLD</b></span> Some DIV text </div> </root>Если значение переменной $txt заменить с text2 на text1, то сработает. Если же есть какие-то внутренние элементы, то нужно указывать текст всех внутренних элементов для сравнения, что не всегда возможно.
Отправлено 20 октября 2010 - 13:06
Отправлено 20 октября 2010 - 13:38
$ww1 = $this->getEval('window.document.doctype.name'); $ww2 = $this->getEval('window.document.doctype.publicId '); $ww3 = $this->getEval('window.document.doctype.systemId ');
Отправлено 20 октября 2010 - 14:16
Вы, наверное, просто торопитесь спрашивать =)Отличная традиция - сам спросил сам отвтил:
определение DOCTYPE$ww1 = $this->getEval('window.document.doctype.name'); $ww2 = $this->getEval('window.document.doctype.publicId '); $ww3 = $this->getEval('window.document.doctype.systemId ');
В FF3 работает...
Отправлено 25 октября 2010 - 12:32
<a onclick="PriceEdit2();" class="price_abtn" href="#">Далее</a>
//a[text()='Далее' and @class='price_abtn' and @href='#' and @onclick]т.е. любая сслыка с текстом Далее классом price_abtn, ссылкой на #, и которая содержит аттрибут onclick
//a[text()='Далее' and @class='price_abtn' and @href='#' and @onclick='PriceEdit2();']@onclick='PriceEdit2();'
Отправлено 05 ноября 2010 - 08:59
highlight //*[text()='Продвижение товаров в классификаторе${nbsp}']
$flag = false; $flag = $this->isElementPresent('//*[text()=\'Продвижение товаров в классификаторе${nbsp}\']'); if ($flag !== true) {$this->fail('3. Sucsessfuly login but fail to navigate to module...');}такой трюк не проходит...
$this->isElementPresent('//*[text()=\'Продвижение товаров в классификаторе'.utf8_encode(chr(160)).'\']');
Отправлено 27 апреля 2011 - 15:18
<table cellspacing="0" class="data" id="customerGrid_table"> ... <tbody id=""> <tr title="http://..../trunk/index.php/admin/customer/edit/id/4/" class="even pointer" id=""> <td class="a-center "> <input type="checkbox" class="massaction-checkbox" value="4" name="customer"> </td> <td class=" a-right "> 4 </td> <td> First Name Last Name </td> <td class=" "> H3hCHkq@psQvc0Mi.com </td> <td class=" "> General </td> <td class=" "> 530-918-3581 </td> <td class=" "> 90232 </td> <td class=" "> United States </td> <td class=" "> California </td> <td class="a-center "> Apr 27, 2011 3:34:45 PM </td> <td class=" last"> <a href="http://..../trunk/index.php/admin/customer/edit/id/4/">Edit</a> </td> </tr> <tr title="http://.../trunk/index.php/admin/customer/edit/id/3/" id="" class="pointer"> <td class="a-center "> <input type="checkbox" class="massaction-checkbox" value="3" name="customer"> </td> ...
Отправлено 29 апреля 2011 - 08:23
Отправлено 04 мая 2011 - 08:22
Отправлено 05 мая 2011 - 09:26
Отправлено 03 апреля 2017 - 07:00
Здравствуйте! Я работаю с xPath для парсинга интернет-сайтов.
Есть код:
Код (Text):
class parseOnePage{ public $list_url; public $list_base_xPath; public $list_each_xPath_relative; public $detail_base_xPath; public $list_xPath_expressions; public $detail_xPath_expressions; private function getElementList(){ $doc = new DOMDocument; $doc->load($this->$list_url); $xpath = new DOMXPath($doc); $tbody = $doc->getElementsByTagName('tbody')->item(0); $query = $this->$list_base_xPath; $list_base_elements = $xpath->query($query, $tbody); if($list_base_elements && count($list_base_elements)){ $list_base_element = $list_base_elements[0]; } else { return false; } $query = $list_each_xPath_relative; $list_each_element = $xpath->query($query, $this->$list_base_xPath); $result = array(); foreach($list_each_element as $element){ //Что здесь писать? } } }
Так у меня вопрос:
$list_each_element - это DOM-элемент каждого товара в списке. Внутри него нужно по xPath-запросу вытащить Наименование, Артикул и т.д. (xPath-формулы уже есть). Как это сделать? Примерно так:
$name = $element->(xPath-выражение) и т.д. Может как-то по-другому. Заранее буду благодарен за ответ.
Отправлено 03 апреля 2017 - 20:15
Так у меня вопрос:
$list_each_element - это DOM-элемент каждого товара в списке. Внутри него нужно по xPath-запросу вытащить Наименование, Артикул и т.д. (xPath-формулы уже есть). Как это сделать? Примерно так:
$name = $element->(xPath-выражение) и т.д. Может как-то по-другому. Заранее буду благодарен за ответ.
может надо использовать стандартный WebElement?
тогда будет список вебэлементов, и в цикле можно будет брать по одному вебэлементу и вытаскивать из него под-элементы используя релятивный икспаф
0 пользователей, 1 гостей, 0 анонимных