首页 > 解决方案 > Selenium find_element_by_id 未按预期运行

问题描述

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time

PATH = "C:\Program Files (x86)\chromedriver.exe"
browser = webdriver.Chrome(PATH)

browser.get("https://orteil.dashnet.org/cookieclicker/")

time.sleep(3)


cookie = browser.find_element_by_id("bigCookie")
cookie_count = browser.find_element_by_id("cookies")

actions = ActionChains(browser)
actions.click(cookie)

productNames = []
for i in range(18):
    productNames.append(browser.find_element_by_id("productName" + str(i)))

print("product names: ", productNames)

productPrices = []
for i in range(18):
    productPrices.append(browser.find_element_by_id("productPrice" + str(i)))

print("product names: ", productNames)

def purchase(count,cps):
    pass

def start_clicking():
    for i in range(500):
        actions.perform()
        count = int(cookie_count.text.split(" ")[0])
        cps = cookie_count.text.split("per second : ")[-1]

start_clicking()
browser.quit()

我正在尝试创建一个机器人来自动播放 cookie 点击器。现在我只是想让机器人点击 cookie,然后创建一个产品名称和价格列表。当我跑步时,我会收到许多难以理解的文本。例如,当 i 等于 4 时,我希望它将 Factory 附加到列表中,因为当我进入检查时,我在元素选项卡中找到了这一行:

<div class="title" id="productName4">Factory</div> 

我还想将价格添加到另一个列表中,例如 <span class="price" id="productPrice4">130,000</span> 在这种情况下为 130000。

标签: pythonselenium-webdriver

解决方案


通过做

for i in range(18):
    productNames.append(browser.find_element_by_id("productName" + str(i)))

productPrices = []
for i in range(18):
    productPrices.append(browser.find_element_by_id("productPrice" + str(i)))

你得到的是网络元素,而不是它们的文本。
如果您想收集这些文本,您应该这样做

for i in range(18):
    productNames.append(browser.find_element_by_id("productName" + str(i)).text)

productPrices = []
for i in range(18):
    productPrices.append(browser.find_element_by_id("productPrice" + str(i)).text)

推荐阅读