簡體   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