使用 xpath 在 python 中搜索硬代码
Searching for hardcode in python with xpath
我想在一堆 python 模块中找到硬编码字符串,如电子邮件、路径或服务器名称(在本例中只是电子邮件)。
我尝试检查所有字典、列表和属性,如果它们包含 "mail" ,然后检查它们是否包含字符串。虽然我得到了所有硬编码的邮件,但我也得到了 mailList,它不是硬编码的,但在行中有 qoutes。
//TESTLIST_STAR_EXPR[contains(@tokenValue,"mail")]/..//STRING[contains(@tokenValue,"'")]
这是一个 xml 示例,它是从 python 模块解析而来的:
<FILE_INPUT tokenValue="import" tokenLine="7" tokenColumn="0">
<STATEMENT tokenValue="import" tokenLine="7" tokenColumn="0">
<STMT_LIST tokenValue="import" tokenLine="7" tokenColumn="0">
<SIMPLE_STMT tokenValue="import" tokenLine="7" tokenColumn="0">
<IMPORT_STMT tokenValue="import" tokenLine="7" tokenColumn="0">
<IMPORT_NAME tokenValue="import" tokenLine="7" tokenColumn="0">
<IMPORT tokenValue="import" tokenLine="7" tokenColumn="0"/>
<DOTTED_AS_NAMES tokenValue="mails" tokenLine="7" tokenColumn="7">
<DOTTED_AS_NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
<DOTTED_NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
<NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
<IDENTIFIER tokenValue="mails" tokenLine="7" tokenColumn="7"/>
</NAME>
</DOTTED_NAME>
</DOTTED_AS_NAME>
</DOTTED_AS_NAMES>
</IMPORT_NAME>
</IMPORT_STMT>
</SIMPLE_STMT>
</STMT_LIST>
<NEWLINE tokenValue="
" tokenLine="7" tokenColumn="12"/>
</STATEMENT>
<STATEMENT tokenValue="serverList" tokenLine="10" tokenColumn="0">
<STMT_LIST tokenValue="serverList" tokenLine="10" tokenColumn="0">
<SIMPLE_STMT tokenValue="serverList" tokenLine="10" tokenColumn="0">
<EXPRESSION_STMT tokenValue="serverList" tokenLine="10" tokenColumn="0">
<TESTLIST_STAR_EXPR tokenValue="serverList" tokenLine="10" tokenColumn="0">
<TEST tokenValue="serverList" tokenLine="10" tokenColumn="0">
<ATOM tokenValue="serverList" tokenLine="10" tokenColumn="0">
<NAME tokenValue="serverList" tokenLine="10" tokenColumn="0">
<IDENTIFIER tokenValue="serverList" tokenLine="10" tokenColumn="0"/>
</NAME>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
<ASSIGN tokenValue="=" tokenLine="10" tokenColumn="11"/>
<TESTLIST_STAR_EXPR tokenValue="[" tokenLine="10" tokenColumn="13">
<TEST tokenValue="[" tokenLine="10" tokenColumn="13">
<ATOM tokenValue="[" tokenLine="10" tokenColumn="13">
<LBRACKET tokenValue="[" tokenLine="10" tokenColumn="13"/>
<TESTLIST_COMP tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
<TEST tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
<ATOM tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
<STRING tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14"/>
</ATOM>
</TEST>
</TESTLIST_COMP>
<RBRACKET tokenValue="]" tokenLine="10" tokenColumn="34"/>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
</EXPRESSION_STMT>
</SIMPLE_STMT>
</STMT_LIST>
<NEWLINE tokenValue="
" tokenLine="10" tokenColumn="35"/>
</STATEMENT>
<STATEMENT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<STMT_LIST tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<SIMPLE_STMT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<EXPRESSION_STMT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<TESTLIST_STAR_EXPR tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<TEST tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<ATOM tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<NAME tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<IDENTIFIER tokenValue="mailDic" tokenLine="12" tokenColumn="0"/>
</NAME>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
<ASSIGN tokenValue="=" tokenLine="12" tokenColumn="8"/>
<TESTLIST_STAR_EXPR tokenValue="{" tokenLine="12" tokenColumn="10">
<TEST tokenValue="{" tokenLine="12" tokenColumn="10">
<ATOM tokenValue="{" tokenLine="12" tokenColumn="10">
<LCURLYBRACE tokenValue="{" tokenLine="12" tokenColumn="10"/>
<DICTORSETMAKER tokenValue="'John'" tokenLine="12" tokenColumn="12">
<TEST tokenValue="'John'" tokenLine="12" tokenColumn="12">
<ATOM tokenValue="'John'" tokenLine="12" tokenColumn="12">
<STRING tokenValue="'John'" tokenLine="12" tokenColumn="12"/>
</ATOM>
</TEST>
<COLON tokenValue=":" tokenLine="12" tokenColumn="19"/>
<TEST tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21">
<ATOM tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21">
<STRING tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21"/>
</ATOM>
</TEST>
</DICTORSETMAKER>
<RCURLYBRACE tokenValue="}" tokenLine="12" tokenColumn="41"/>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
</EXPRESSION_STMT>
</SIMPLE_STMT>
</STMT_LIST>
<NEWLINE tokenValue="
" tokenLine="12" tokenColumn="42"/>
</STATEMENT>
<STATEMENT tokenValue="selection" tokenLine="14" tokenColumn="0">
<STMT_LIST tokenValue="selection" tokenLine="14" tokenColumn="0">
<SIMPLE_STMT tokenValue="selection" tokenLine="14" tokenColumn="0">
<EXPRESSION_STMT tokenValue="selection" tokenLine="14" tokenColumn="0">
<TESTLIST_STAR_EXPR tokenValue="selection" tokenLine="14" tokenColumn="0">
<TEST tokenValue="selection" tokenLine="14" tokenColumn="0">
<ATOM tokenValue="selection" tokenLine="14" tokenColumn="0">
<NAME tokenValue="selection" tokenLine="14" tokenColumn="0">
<IDENTIFIER tokenValue="selection" tokenLine="14" tokenColumn="0"/>
</NAME>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
<ASSIGN tokenValue="=" tokenLine="14" tokenColumn="10"/>
<TESTLIST_STAR_EXPR tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<TEST tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<M_EXPR tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<ATOM tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<STRING tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12"/>
</ATOM>
<MOD tokenValue="%" tokenLine="14" tokenColumn="23"/>
<POWER tokenValue="mails" tokenLine="14" tokenColumn="24">
<ATOM tokenValue="mails" tokenLine="14" tokenColumn="24">
<NAME tokenValue="mails" tokenLine="14" tokenColumn="24">
<IDENTIFIER tokenValue="mails" tokenLine="14" tokenColumn="24"/>
</NAME>
</ATOM>
<TRAILER tokenValue="." tokenLine="14" tokenColumn="29">
<DOT tokenValue="." tokenLine="14" tokenColumn="29"/>
<NAME tokenValue="Emails" tokenLine="14" tokenColumn="30">
<IDENTIFIER tokenValue="Emails" tokenLine="14" tokenColumn="30"/>
</NAME>
</TRAILER>
</POWER>
</M_EXPR>
</TEST>
</TESTLIST_STAR_EXPR>
</EXPRESSION_STMT>
</SIMPLE_STMT>
</STMT_LIST>
</STATEMENT>
<EOF tokenValue="EOF" tokenLine="14" tokenColumn="36"/>
</FILE_INPUT>
问题是我想从 mailDic 字典中捕获条目,而不是从选择中捕获条目。
您写道:
Although I get all hardcoded mails, I also get mailList, which are not hardcoded, but have qoutes in the line.
给定您的输入数据,您当前的表达式 returns:
<STRING tokenColumn="12" tokenLine="12" tokenValue="'John'"/>
<STRING tokenColumn="21" tokenLine="12" tokenValue="'john.e@hotmail.com'"/>
<STRING tokenColumn="12" tokenLine="14" tokenValue="'mails=s%'"/>
单词 "mailList" 没有出现在你的数据中,但如果我假设它在当前显示 "mailDic" 的位置,那么你可以用这个修复它:
//TESTLIST_STAR_EXPR[
contains(@tokenValue,"mail")
and not(@tokenValue = 'mailList')]
/..
//STRING[contains(@tokenValue,"'")]
如果您想过滤掉原始输入中的 s%
,您可以使用以下命令:
//TESTLIST_STAR_EXPR[contains(@tokenValue,"mail")]
/..
//STRING[
contains(@tokenValue,"'")
and not contains(@tokenValue, 's%')]
否则,请使用与您的问题匹配的输入更新您的问题,因为它会导致 that link I gave you 中的 "Verifiable" 失败,也就是说,我看不出哪里出了问题,因为它是正确的; ).
我想在一堆 python 模块中找到硬编码字符串,如电子邮件、路径或服务器名称(在本例中只是电子邮件)。 我尝试检查所有字典、列表和属性,如果它们包含 "mail" ,然后检查它们是否包含字符串。虽然我得到了所有硬编码的邮件,但我也得到了 mailList,它不是硬编码的,但在行中有 qoutes。
//TESTLIST_STAR_EXPR[contains(@tokenValue,"mail")]/..//STRING[contains(@tokenValue,"'")]
这是一个 xml 示例,它是从 python 模块解析而来的:
<FILE_INPUT tokenValue="import" tokenLine="7" tokenColumn="0">
<STATEMENT tokenValue="import" tokenLine="7" tokenColumn="0">
<STMT_LIST tokenValue="import" tokenLine="7" tokenColumn="0">
<SIMPLE_STMT tokenValue="import" tokenLine="7" tokenColumn="0">
<IMPORT_STMT tokenValue="import" tokenLine="7" tokenColumn="0">
<IMPORT_NAME tokenValue="import" tokenLine="7" tokenColumn="0">
<IMPORT tokenValue="import" tokenLine="7" tokenColumn="0"/>
<DOTTED_AS_NAMES tokenValue="mails" tokenLine="7" tokenColumn="7">
<DOTTED_AS_NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
<DOTTED_NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
<NAME tokenValue="mails" tokenLine="7" tokenColumn="7">
<IDENTIFIER tokenValue="mails" tokenLine="7" tokenColumn="7"/>
</NAME>
</DOTTED_NAME>
</DOTTED_AS_NAME>
</DOTTED_AS_NAMES>
</IMPORT_NAME>
</IMPORT_STMT>
</SIMPLE_STMT>
</STMT_LIST>
<NEWLINE tokenValue="
" tokenLine="7" tokenColumn="12"/>
</STATEMENT>
<STATEMENT tokenValue="serverList" tokenLine="10" tokenColumn="0">
<STMT_LIST tokenValue="serverList" tokenLine="10" tokenColumn="0">
<SIMPLE_STMT tokenValue="serverList" tokenLine="10" tokenColumn="0">
<EXPRESSION_STMT tokenValue="serverList" tokenLine="10" tokenColumn="0">
<TESTLIST_STAR_EXPR tokenValue="serverList" tokenLine="10" tokenColumn="0">
<TEST tokenValue="serverList" tokenLine="10" tokenColumn="0">
<ATOM tokenValue="serverList" tokenLine="10" tokenColumn="0">
<NAME tokenValue="serverList" tokenLine="10" tokenColumn="0">
<IDENTIFIER tokenValue="serverList" tokenLine="10" tokenColumn="0"/>
</NAME>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
<ASSIGN tokenValue="=" tokenLine="10" tokenColumn="11"/>
<TESTLIST_STAR_EXPR tokenValue="[" tokenLine="10" tokenColumn="13">
<TEST tokenValue="[" tokenLine="10" tokenColumn="13">
<ATOM tokenValue="[" tokenLine="10" tokenColumn="13">
<LBRACKET tokenValue="[" tokenLine="10" tokenColumn="13"/>
<TESTLIST_COMP tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
<TEST tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
<ATOM tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14">
<STRING tokenValue="'chserver.prod.amce'" tokenLine="10" tokenColumn="14"/>
</ATOM>
</TEST>
</TESTLIST_COMP>
<RBRACKET tokenValue="]" tokenLine="10" tokenColumn="34"/>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
</EXPRESSION_STMT>
</SIMPLE_STMT>
</STMT_LIST>
<NEWLINE tokenValue="
" tokenLine="10" tokenColumn="35"/>
</STATEMENT>
<STATEMENT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<STMT_LIST tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<SIMPLE_STMT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<EXPRESSION_STMT tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<TESTLIST_STAR_EXPR tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<TEST tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<ATOM tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<NAME tokenValue="mailDic" tokenLine="12" tokenColumn="0">
<IDENTIFIER tokenValue="mailDic" tokenLine="12" tokenColumn="0"/>
</NAME>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
<ASSIGN tokenValue="=" tokenLine="12" tokenColumn="8"/>
<TESTLIST_STAR_EXPR tokenValue="{" tokenLine="12" tokenColumn="10">
<TEST tokenValue="{" tokenLine="12" tokenColumn="10">
<ATOM tokenValue="{" tokenLine="12" tokenColumn="10">
<LCURLYBRACE tokenValue="{" tokenLine="12" tokenColumn="10"/>
<DICTORSETMAKER tokenValue="'John'" tokenLine="12" tokenColumn="12">
<TEST tokenValue="'John'" tokenLine="12" tokenColumn="12">
<ATOM tokenValue="'John'" tokenLine="12" tokenColumn="12">
<STRING tokenValue="'John'" tokenLine="12" tokenColumn="12"/>
</ATOM>
</TEST>
<COLON tokenValue=":" tokenLine="12" tokenColumn="19"/>
<TEST tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21">
<ATOM tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21">
<STRING tokenValue="'john.e@hotmail.com'" tokenLine="12" tokenColumn="21"/>
</ATOM>
</TEST>
</DICTORSETMAKER>
<RCURLYBRACE tokenValue="}" tokenLine="12" tokenColumn="41"/>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
</EXPRESSION_STMT>
</SIMPLE_STMT>
</STMT_LIST>
<NEWLINE tokenValue="
" tokenLine="12" tokenColumn="42"/>
</STATEMENT>
<STATEMENT tokenValue="selection" tokenLine="14" tokenColumn="0">
<STMT_LIST tokenValue="selection" tokenLine="14" tokenColumn="0">
<SIMPLE_STMT tokenValue="selection" tokenLine="14" tokenColumn="0">
<EXPRESSION_STMT tokenValue="selection" tokenLine="14" tokenColumn="0">
<TESTLIST_STAR_EXPR tokenValue="selection" tokenLine="14" tokenColumn="0">
<TEST tokenValue="selection" tokenLine="14" tokenColumn="0">
<ATOM tokenValue="selection" tokenLine="14" tokenColumn="0">
<NAME tokenValue="selection" tokenLine="14" tokenColumn="0">
<IDENTIFIER tokenValue="selection" tokenLine="14" tokenColumn="0"/>
</NAME>
</ATOM>
</TEST>
</TESTLIST_STAR_EXPR>
<ASSIGN tokenValue="=" tokenLine="14" tokenColumn="10"/>
<TESTLIST_STAR_EXPR tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<TEST tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<M_EXPR tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<ATOM tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12">
<STRING tokenValue="'mails=s%'" tokenLine="14" tokenColumn="12"/>
</ATOM>
<MOD tokenValue="%" tokenLine="14" tokenColumn="23"/>
<POWER tokenValue="mails" tokenLine="14" tokenColumn="24">
<ATOM tokenValue="mails" tokenLine="14" tokenColumn="24">
<NAME tokenValue="mails" tokenLine="14" tokenColumn="24">
<IDENTIFIER tokenValue="mails" tokenLine="14" tokenColumn="24"/>
</NAME>
</ATOM>
<TRAILER tokenValue="." tokenLine="14" tokenColumn="29">
<DOT tokenValue="." tokenLine="14" tokenColumn="29"/>
<NAME tokenValue="Emails" tokenLine="14" tokenColumn="30">
<IDENTIFIER tokenValue="Emails" tokenLine="14" tokenColumn="30"/>
</NAME>
</TRAILER>
</POWER>
</M_EXPR>
</TEST>
</TESTLIST_STAR_EXPR>
</EXPRESSION_STMT>
</SIMPLE_STMT>
</STMT_LIST>
</STATEMENT>
<EOF tokenValue="EOF" tokenLine="14" tokenColumn="36"/>
</FILE_INPUT>
问题是我想从 mailDic 字典中捕获条目,而不是从选择中捕获条目。
您写道:
Although I get all hardcoded mails, I also get mailList, which are not hardcoded, but have qoutes in the line.
给定您的输入数据,您当前的表达式 returns:
<STRING tokenColumn="12" tokenLine="12" tokenValue="'John'"/>
<STRING tokenColumn="21" tokenLine="12" tokenValue="'john.e@hotmail.com'"/>
<STRING tokenColumn="12" tokenLine="14" tokenValue="'mails=s%'"/>
单词 "mailList" 没有出现在你的数据中,但如果我假设它在当前显示 "mailDic" 的位置,那么你可以用这个修复它:
//TESTLIST_STAR_EXPR[
contains(@tokenValue,"mail")
and not(@tokenValue = 'mailList')]
/..
//STRING[contains(@tokenValue,"'")]
如果您想过滤掉原始输入中的 s%
,您可以使用以下命令:
//TESTLIST_STAR_EXPR[contains(@tokenValue,"mail")]
/..
//STRING[
contains(@tokenValue,"'")
and not contains(@tokenValue, 's%')]
否则,请使用与您的问题匹配的输入更新您的问题,因为它会导致 that link I gave you 中的 "Verifiable" 失败,也就是说,我看不出哪里出了问题,因为它是正确的; ).