如何使用Selenium提取Spinxo网站的随机生成ID值?
问题描述
我尝试从该网站提取随机生成的ID值,但即使组合使用各种find_element相关选项,仍无法提取这些ID值。请问应使用何种定位选项来提取?
目标元素的HTML结构
<ul class="clear list01"><li><a href="#" name="lnkName">2cutecher</a></li><li><a href="#" name="lnkName">Aceog</a></li><li><a href="#" name="lnkName">Bushba</a></li><li><a href="#" name="lnkName">Catcheman</a></li><li><a href="#" name="lnkName">Contencewo</a></li><li><a href="#" name="lnkName">Cozyfoot</a></li><li><a href="#" name="lnkName">Desigoesi</a></li><li><a href="#" name="lnkName">FlashTa</a></li><li><a href="#" name="lnkName">Gamyopra</a></li><li><a href="#" name="lnkName">Grimazon</a></li><li><a href="#" name="lnkName">Idolin</a></li><li><a href="#" name="lnkName">Inetenli</a></li><li><a href="#" name="lnkName">Jiggyny</a></li><li><a href="#" name="lnkName">Kenjill</a></li><li><a href="#" name="lnkName">LuvFlirty</a></li><li><a href="#" name="lnkName">Metabre</a></li><li><a href="#" name="lnkName">MuraPira</a></li><li><a href="#" name="lnkName">Patepoi</a></li><li><a href="#" name="lnkName">Penhama</a></li><li><a href="#" name="lnkName">PlusAnguris</a></li><li><a href="#" name="lnkName">Rawcsto</a></li><li><a href="#" name="lnkName">Runen</a></li><li><a href="#" name="lnkName">SarenApril</a></li><li><a href="#" name="lnkName">Sexylo</a></li><li><a href="#" name="lnkName">Slashoest</a></li><li><a href="#" name="lnkName">ToughDressy</a></li><li><a href="#" name="lnkName">Tricar</a></li><li><a href="#" name="lnkName">Upforia</a></li><li><a href="#" name="lnkName">Uppertska</a></li><li><a href="#" name="lnkName">Wowro</a></li></ul>
网站截图

我当前的代码
driver.get('https://www.spinxo.com/') spin_btn = driver.find_element(By.CLASS_NAME, 'spin') spin_btn.click() id_list = (driver.find_elements(By.NAME, 'lnkName')) for id in range(len(id_list)): print(id_list[id].text)
解决方案
你的代码核心问题是点击生成按钮后没有等待页面动态内容加载完成,直接查找元素导致获取不到内容。以下是可行的解决方法:
方法1:添加显式等待(推荐)
用WebDriverWait等待元素加载完成,确保生成的ID元素已渲染到页面中:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver.get('https://www.spinxo.com/') # 点击生成按钮 spin_btn = driver.find_element(By.CLASS_NAME, 'spin') spin_btn.click() # 最多等待10秒,直到所有目标元素加载完成 id_list = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.NAME, 'lnkName')) ) # 遍历输出文本 for item in id_list: print(item.text)
方法2:优化定位方式
除了By.NAME,还可以用更精准的CSS选择器或XPath定位:
- CSS选择器:
By.CSS_SELECTOR, 'ul.list01 a[name="lnkName"]' - XPath:
By.XPATH, '//ul[@class="clear list01"]//a[@name="lnkName"]'
示例代码(结合等待):
id_list = WebDriverWait(driver, 10).until( EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'ul.list01 a[name="lnkName"]')) )
注意事项
- 确保Selenium版本与浏览器驱动版本匹配,避免兼容性问题
- 显式等待比强制等待(
time.sleep())更高效,能自适应页面加载速度
内容的提问来源于stack exchange,提问作者25 tamias
相关产品推荐
相关产品推荐

