Итак, первый вопрос
Есть следующий 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 анонимных