我的电子邮件如下:
我们收到了将您的电子邮件地址更改为example@thisexample.com的请求。
要完成此过程,请输入以下验证码验证您的电子邮件地址。
86761G
此代码是临时的,将在30分钟后过期。
如果您没有要求,您的帐户信息将保持不变。无需采取进一步行动。
热烈的问候, Example.com
我需要解析验证码:86761G。抓住代码是动态的,意味着它正在发生变化。虽然电子邮件的布局是静态的,但我的想法是通过新的线索引[2]抓住它(尽管看起来它之间有空格,它是Div中的第三个<p>
标签。 [2]通过新线索引)。
或者我的另一个想法是通过HTML以某种方式(不要真的想使用HTMLAgilityPack)。 Div:
<td colspan="2" style="padding:1.2em 45px 2em 45px;color:#000;font- family:Corbel, 'Trebuchet MS', 'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:.875em;line-height:1.1em;">
<p>We’ve received a request to change your email address to example@thisexample.com.</p>
<p>To complete the process, please verify your email address by entering the following verification code.</p>
<p>86761G</p>
<p>This code is temporary and will expire in 30 minutes.</p>
<p>If this wasn’t requested by you, your account information will remain unchanged. No further action is required.</p>
<p>Warm regards,<br>
example.com</p>
</td>
知道如何解析这些数据吗?尽管我知道正则表达式不适用于HTML,因为它不是常规文本,但我正在考虑正则表达式。如果我需要HTMLAgilityPack,我会使用它,如果不是,我不喜欢。谢谢你们!
哦注意事项 - 我正在通过Selenium使用Firefox,所以总是可以选择使用它的内置函数以某种方式获取它吗?
编辑:我太蠢了。 Selenium - FindElementbyXPath(facepalm)答案 0 :(得分:1)
与流行(以及错误的,imo)观点相反,您可以使用正则表达式来提取这一点,因为该文档的总体结构实际上符合要求被视为常规语法(http://en.wikipedia.org/wiki/Chomsky_hierarchy)
这是我要使用的正则表达式:
following verification code.</p>\s*<p>(\S+)</p>
注意缺少任何锚点(^$
),它使用已知文本“跟随验证码”来匹配代码之前。验证码随后包含在单个正则表达式组中。
答案 1 :(得分:1)
如果您使用的是硒,最简单的方法是将它与以下css选择器匹配:p:nth-child(3)
答案 2 :(得分:0)
由于您之前只提到验证码部分是动态的,因此我假设整个标记结构不会发生变化。
如果是这样,您可以使用
<p>(.*?)<\/p>
这将捕获<p>
个标签,第三个捕获的组是您的验证码。
答案 3 :(得分:0)
如果电子邮件始终完全相同,您可以使用以下正则表达式接受更改代码:
(?<d>\<p\>[\S^\.]*</p\>)
如果它更复杂,你可以这样做:
(?<d>\<p\>.*</p\>)
将找到所有段落行,然后您可以通过消除常量字符串来迭代并找到代码,如:
要完成此过程,请输入以下验证码验证您的电子邮件地址。