【问题标题】:Getting the value of a script's "var" using Selenium with Python使用 Selenium 和 Python 获取脚本“var”的值
【发布时间】:2020-08-20 22:24:46
【问题描述】:
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("url_goes_here")

p_id = driver.find_elements_by_tag_name("script")

这为我提供了我需要的脚本。我不需要执行它,因为它已经在初始页面加载时执行并运行。 它包含一个名为“task”的变量。如何使用 Selenium 访问它的值?

【问题讨论】:

    标签: javascript python selenium google-chrome var


    【解决方案1】:

    正则表达式模块re 可以帮助您:

    import re
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("url_goes_here")
    
    p_id = driver.find_elements_by_tag_name("script")
    
    for script in p_id:
        innerHTML=script.get_property('innerHTML')
        task=re.search('var task = (.*);',innerHTML)
        if task is not None:
            print(task.group(1))
    

    它的作用是查看每个脚本的 innerHTML,并从定义的搜索模式 ('var task = (.*);') 中捕获匹配的字符串组 ((.*))。如果找到匹配项,则打印出该组。

    【讨论】:

    • 首先,到目前为止,你是这个线程中唯一一个似乎得到了我真正想要的东西的人,即提取我想要的适当
    • 奇怪..如果你使用.get_attribute 而不是.get_property 你还会得到一个空字符串吗?
    • 我从来没有尝试过.get_attribute,但我最终解决了我的问题,方法是通过.find_elements_by_xpath 提取适当的元素,而不是通过原始问题中描述的标签名称和然后 使用您的.get_property('innerHTML') 建议。我的问题现在已经解决了,既然你是唯一一个至少让我走上解决问题的正确道路的人,我会把你的答案标记为正确的!谢谢!!! :)
    【解决方案2】:

    您可以通过.text.getText() 访问tag 或html 的任何element 的值

    【讨论】:

    • 我知道这些方法,但第一个返回一个空字符串给我,无论我尝试什么。而第二个给出: AttributeError: 'WebElement' object has no attribute 'getText'
    【解决方案3】:

    由于您使用的是返回元素列表的find_elements_by_tag_name()。 迭代该列表并检查 element.text 是否包含该元素的 task 然后 print text

    p_id = driver.find_elements_by_tag_name("script")
    for id in p_id:
        if 'task' in id.text:
            print(id.text)
    

    【讨论】:

    • Since you are using find_elements_by_tag_name() which returns list of elements.. 对专门抓取脚本有什么更好的建议吗?搜索...比方说,XPath,会产生更好的格式化输出或其他东西吗?其次,这是通过执行 find_elements_by_tag_name() 生成的输出列表元素的实际内容:<selenium.webdriver.remote.webelement.WebElement (session="53d2976784532dd4717abff68170b22a", element="8d9f432d-7a2e-47e0-8023-d6c092ee9620")> 如您所见,它不是很清晰。
    • @Alexander : 如果没有理解您的要求,我非常抱歉。我相信您正在搜索包含文本 task 的脚本标签,对吗?
    • 脚本标签已被找到并存储在列表中。问题是,如何从存储在列表中的原始数据中提取其变量“任务”的值。
    • 那么您需要发布该脚本的详细信息。正则表达式肯定可以提取值。
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2018-09-29
    • 2017-06-08
    • 2016-12-30
    • 2021-12-14
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多