0

I need the value for attribute with the name "serial" which I am unable to get with my limited skills in python & selenium. I am looking for the output of "0000013". and please guide me how to capture the element in a loop as well. many thanks.

What I have tried:

for data in soup.find_all(class_='CoreData'):
    h = data.find('h2')
    k = h.find('serial')
    print(k)

It returns value of "None" instead of the value of "Serial"

<h2>                        <!--For Verified item-->
                                        <a class="clickable" style="cursor:pointer;" onmousedown="open_item_detail('0000013', '0', false)" id="View item Detail" serial="0000013">
                                            Sample Item
                                        </a>
                                    <!--For unverified item-->
                                </h2>
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
ACE
  • 45
  • 7

2 Answers2

2

To get the value of serial, try the following:

from bs4 import BeautifulSoup

html = """
<h2>
 <!--For Verified item-->
 <a class="clickable" id="View item Detail" onmousedown="open_item_detail('0000013', '0', false)" serial="0000013" style="cursor:pointer;">
  Sample Item
 </a>
 <!--For unverified item-->
</h2>"""

soup = BeautifulSoup(html, "html.parser")

for data in soup.find_all("a", class_="clickable"):
    print(data["serial"])

Output:

0000013
MendelG
  • 14,885
  • 4
  • 25
  • 52
0

To print the value of the attribute serial i.e. 0000013 you need to induce WebDriverWait for the visibility_of_element_located() and you can use either of the following Locator Strategies:

  • Using CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h2 a.clickable[onmousedown^='open_item_detail']"))).get_attribute("data-clipboard-text"))
    
  • Using XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h2//a[@class='clickable' and starts-with(@onmousedown, 'open_item_detail')]"))).get_attribute("serial"))
    
  • Note : You have to add the following imports :

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352