繁体   English   中英

python-selenium,使用 xpath

[英]python-selenium, using xpath

基本上,我试图通过 python 制作宏程序来购买只有一天可用的产品(它通常售罄并且只开放特定时间。)

此外,它是第一次服务,几乎没有机会。

所以问题是这样的:

我尝试使用 XPath 和 select 元素,然后使用ifelse来区分是否可以购买(基于网站中可用和不可用的产品的比较。)。

所以我在页面中搜索了重叠的代码并找到了那些。


<1> 现在可用的产品是这样的

<ul class="_3YA58cPPsy">

<li class="_3nAZvQO51p N=a:pcs.buy">

<a href="javascript:void(0)" class="OgETmrvExa">

<span class="blind">

구매하기

</span>
</a>
</li>
</ul>

<2>未开封的商品是这样的

<ul class="_3YA58cPPsy">

<li class="_3nAZvQO51p N=a:pcs.mylist">

<a href="javascript:void(0)" role="button" class="_3Dy-2NaoiG" aria-pressed="false">

<span class="_3nBu7xChUl">

<span class="blind">

찜하기

</span>

</span>

<em class="_1c-2nfzJqH">

<336>

</em>
</a>
</li>
</ul>

所以我就这样尝试。

 while True:

    xpath='//ul[@class="_3YA58cPPsy"]'

    aa=driver.find_element_by_xpath(xpath).get_attribute(class)

    if aa== "OgETmrvExa"
    
       print=("Yes")    

       xpath="//ul[@class='_3YA58cPPsy']"

       driver.find_element_by_xpath(xpath).click()
 
       break

    else 
 
       Print=("no")
 
       driver.refresh()

       time.sleep(1)

或者,我试图使用el.text之一。

   while True:

     xpath='//ul[@class="_3YA58cPPsy"]'

     el=driver.find_element_by_xpath(xpath)

     if  el.text="구매하기"       #<- this text is the same in <1>'s text

         el.click()
        
         break 

     else :
         driver.refresh()

它根本不起作用。 我做错了什么? 我应该如何解决它?

此外,我将添加 <1> 和 <2> 链接,这是非英语的,但您会看到绿色按钮是“购买”按钮。 <1>: https://smartstore.naver.com/coopnc/products/4871588151?NaPm=ct%3Dkl0z3145%7Cci%3Dcheckout%7Ctr%3Dppc%7Ctrx%3D%7Chk%3Df4d54ef22f2a5479043920e1957be34937fa2c1b

<2>: https://smartstore.naver.com/hwaflora/products/5192517936

多谢。

一些东西:

xpath='//ul[@class="_3YA58cPPsy"]'
aa=driver.find_element_by_xpath(xpath).get_attribute(class)
if aa == "OgETmrvExa":
    ...

本节有两个错误:

  1. class必须用引号括起来 - "class"
  2. 您的 XPath 正在根据它的 class 查找一个元素,然后您正在为该 class 的名称定义一个变量(在本例中为"_3YA58cPPsy" 。) aa 将始终为"_3YA58cPPsy" ,因此您的 if 语句将永远不会返回 true。

在这种情况下,可能更容易搜索 ul 上方的 div,并查看该 div 中有多少个 ul:

buy = driver.find_element_by_css_selector("div.XqRGHcrncz")
lists = buy.find_elements_by_tag_name("ul")
if len(lists) == 2:
    buy.click()

在您的第二个版本中:

xpath='//ul[@class="_3YA58cPPsy"]'
el=driver.find_element_by_xpath(xpath)
if  el.text="구매하기" :
    ...

你遇到了类似的问题。 您尝试访问的文本不是 ul 的文本,而是 ul 的曾孙 - //ul[@class="_3YA58cPPsy"]/li/a/span的文本。 我认为我上面引用的方法比查找特定元素来提取数据更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM