php通过Xpath获取优快云的Dom元素

Xpath的Dom分析真的比自己写正则去匹配Dom要高效很多,而要使用php的XpathDom,这里我使用的是Wamp,要打开php配置的extensions的openSSL,否则在获取网页的Dom时会报错,然后我们所需的某个元素的Xpath可以通过浏览器,例如谷歌浏览器和火狐浏览器按F12调出网页的element控制台,(这里学过前端的都会的),然后右键自己想要获得的元素,Copy Xpath复制这个元素的Xpath


现在我们已经获取了元素的Xpath了,示例我们获取的Xpath为:

//*[@id='mainBox']/main/div[2]/div[2]/h4/a

这里我们是要获取一个列表,所以改为//*[@id='mainBox']/main/div[2]/div/h4/a

<?php
for($j=1 ;$j<=2;$j++){
    $content= file_get_contents('https://blog.youkuaiyun.com/SIRENloazhang/article/list/'.$j.'?');
    $document = new DOMDocument();
    $document->strictErrorChecking = false;
    
    /* $tidy     = new tidy;
    $content = $tidy->repairString($content);
    $content = mb_convert_encoding($content, 'UTF-8'); *//*这里就不用Tidy了*/
    
    @$document->loadhtml($content); /*@是一定要给的*/
    $xpath = new DOMXPAth($document);
    $num = 0;
    $elements= $xpath->query("//*[@id='mainBox']/main/div[2]/div/h4/a");
    if($elements->length!=0){
        for ($i = 0; $i < $elements->length; $i++) {
            $element = $elements->item($i);
            $url = $element->getAttribute('href');
            print_r($url.'<br/>');
            $num++;
        }
    }else{
        echo "读取完毕!!!";
    }
    
}

?>

运行结果:


<think>嗯,用户想了解移动端获取元素XPathDOM路径的方法和工具。首先,我需要回忆一下之前学过的移动端测试相关的知识,尤其是元素定位方面的内容。记得Appium是常用的自动化测试工具,支持XPath和CSS选择器定位元素。用户提到的引用中也有相关的信息,比如引用[1]和引用[3]提到了XPath的使用和Appium的命令,引用[4]讨论了CSS选择器。这些可能需要结合起来回答。 首先,我应该介绍手动获取XPath的方法。例如,在Appium Inspector或者Android Studio的Layout Inspector中查看元素属性,然后手动拼接XPath。比如,使用text属性或者resource-id来构建,如`//*[@text='Views']`,这里引用[1]的例子正好适用。需要说明如何利用这些属性生成XPath,可能还需要提到通配符,如引用[2]中的@*或者node(),不过移动端可能更多使用具体属性。 然后是自动生成XPath的工具。Appium Inspector和UI Automator Viewer可以自动生成元素XPath路径。Appium的findElement方法可以通过XPath定位,引用[3]中的文档应该支持这一点。可能需要提到这些工具的使用步骤,比如连接设备、选择元素查看生成的XPath。 关于DOM路径,移动端通常使用UI层次结构,类似于DOM。可以借助工具导出UI的XML文件,比如Appium的pageSource方法,然后解析这个文件来获取路径。另外,自动化脚本可以通过遍历父节点来拼接DOM路径,这部分可能需要代码示例,比如用Appium的JavaScriptExecutor获取父节点信息。 工具方面,除了提到的Appium Inspector和UI Automator Viewer,还可以推荐Chrome DevTools对于WebView的支持,以及第三方工具如Airtest和Selendroid。需要说明每个工具的优缺点,比如是否支持跨平台、是否需要root等。 可能还需要比较XPath和CSS选择器的优缺点,引用[4]提到CSS选择器通过类名、ID等生成,通常更高效,但在移动端可能不如XPath灵活,特别是对于动态元素。需要根据具体情况选择定位方式。 用户可能需要具体的步骤或代码示例,比如如何用Appium获取XPath,或者如何编写脚本遍历父节点生成DOM路径。还要注意移动端和Web端的区别,移动端的DOM结构可能更扁平,或者某些属性不可用。 另外,用户的问题可能涉及到不同平台(Android/iOS),需要分别说明吗?比如iOS的XCUITest和Android的UIAutomator可能有不同的工具或属性名称。例如,iOS的accessibilityId对应Android的resource-id,可能需要统一说明或分开讨论。 最后,生成的相关问题可能涉及性能优化、不同定位方式的比较、动态元素处理等,需要确保问题与主题相关,且能引导用户进一步学习。</think>### 移动端获取元素XPathDOM路径的方法 #### 一、XPath获取方法 1. **手动构建XPath表达式** - 基于元素属性(如`text`、`resource-id`、`content-desc`)拼接XPath。例如: `//*[@text='Views']` 或 `//android.widget.Button[@resource-id='com.example:id/login']`[^1][^3] - 使用XPath通配符简化定位: - `//*[@*='value']` 匹配任意属性等于`value`的元素 - `//*[contains(@text, '部分文本')]` 匹配文本包含特定字符串的元素[^2] 2. **自动生成XPath工具** - **Appium Inspector**:连接设备后选中元素,直接显示XPath表达式[^3] - **UI Automator Viewer**(Android):查看元素层级结构自动生成XPath - **Xcode Accessibility Inspector**(iOS):检查元素导出XPath #### 二、DOM路径获取方法 1. **UI层次结构解析** - 通过Appium的`driver.page_source`获取页面XML结构,解析元素的父子节点路径 - 示例代码: ```python xml = driver.page_source # 解析XML生成类似路径:/android.widget.FrameLayout[1]/android.widget.LinearLayout[2] ``` 2. **自动化脚本遍历父节点** ```python element = driver.find_element(By.XPATH, "//*[@text='Submit']") parent = element.find_element(By.XPATH, "..") # 获取父节点 ``` #### 三、常用工具对比 | 工具 | 平台 | 功能 | 局限性 | |-----------------------|---------|---------------------------|-------------------------| | Appium Inspector | Android/iOS | 可视化查看元素生成XPath | 需连接设备启动会话 | | UI Automator Viewer | Android | 导出完整UI层级结构 | 仅支持Android,需USB调试| | Airtest IDE | Android/iOS | 自动录制元素路径 | 需要安装专用IDE | #### 四、选择建议 - **优先使用`resource-id`或`accessibilityId`**:直接定位效率高于XPath[^4] - **复杂场景用XPath**:适合动态文本、多属性组合匹配 - **避免绝对路径**:使用相对路径减少对UI层级变化的敏感度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值