繁体   English   中英

如何从“健康”元素中提取文本

[英]How to extract the text from the “Health” Element

我一直在努力寻找适用于硒的正确链接,以达到该游戏的HP值。

为了检查自己,我将提供以下用户名和密码:

网址: https : //s3-en.bitefight.gameforge.com/user/login

用户名:testaccount111

密码:python123

在此处输入图片说明

我已经尝试过health = driver.find_elements_by_xpath("//div[2]/div/div[1]/text()[5]")但它给出了错误。

在xpath下使用以定位您的元素(在图像中标记)

//img[@alt='Health']/preceding-sibling::text()[1]

但是硒不允许您使用文本节点定位元素。 另一种方法是您可以使用javascript执行程序来评估xpath。

我在Java中有以下代码参考。 请按照python进行更改

JavascriptExecutor js = (JavascriptExecutor)driver;
Object health= js.executeScript("var value = document.evaluate(\"//img[@alt='Health']/preceding-sibling::text()[1]\",document, null, XPathResult.STRING_TYPE, null ); return value.stringValue;"); 
System.out.println(health.toString().trim());

要么

WebElement element = driver.findElement(By.xpath("//div[@class='gold']"));
JavascriptExecutor js = (JavascriptExecutor)driver;
String health= (String) js.executeScript("return arguments[0].childNodes[8].textContent", element);
System.out.println(health.trim());

@NarendraR有一个很好的答案,在python中获得结果的代码为21500

health = driver.execute_script('''
  var value = document.evaluate("//img[@alt='Health']/preceding-sibling::text()[1]",document, null, XPathResult.STRING_TYPE, null );
  return value.stringValue.split('/')[0].trim().replace('.', '');
''');

而另一种方法

elem = driver.find_element_by_xpath('//div[@class="gold"]')
health = re.search(r'(\d+\.\d+)\s+/', elem.text).group(1)
health = int(health.replace('.', ''))

按照网站https://s3-en.bitefight.gameforge.com/user/loginHealth元素(即8.460 / 21.500)中提取文本,您需要诱使WebDriverWait使所需的元素可见 ,您可以使用以下命令解:

  • 代码块:

     from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_argument('disable-infobars') driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\\Utility\\BrowserDrivers\\chromedriver.exe') driver.get("https://s3-en.bitefight.gameforge.com/user/login") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='input' and @name='user']"))).send_keys("testaccount111") driver.find_element_by_xpath("//input[@class='input' and @name='pass']").send_keys("python123") driver.find_element_by_xpath("//input[@class='btn-small' and @value='Login']").click() WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='gold']//img[contains(@src,'/img/symbols')]"))) health_text = driver.find_element_by_xpath("//div[@class='gold']").get_attribute("textContent").splitlines()[5] print(health_text) 
  • 控制台输出:

        8.460 / 21.500 

暂无
暂无

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

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