【问题标题】:How to split list of coordinates into separate variables?如何将坐标列表拆分为单独的变量?
【发布时间】:2023-02-04 01:40:01
【问题描述】:

我正在尝试拆分我找到的元素的坐标

elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[text() ='100']")))

当我只需要找到只出现一次的元素的坐标时,我只使用 .location,但我的问题是当我必须找到出现多次的元素时。我试过这样做,但没有用

elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[text() ='100']")))

elementlist = []

for element in elements:
    elementlocation = element.location
    elementlist.append(location)
    print(elementlist)

x,y = elementlist.split(",")
print(x,y)

我尝试获取多次出现的元素的坐标列表,将它们拆分为单独的变量 x、y 并打印出来

更新 :

<div class="gl-MarketGroup_Wrapper ">
  <div class="srb-Market25Wrapping gl-Market_General gl-Market_General-columnheader gl-Market_General-haslabels gl-Market_General-pwidth12-5 ">
    <div class="srb-ParticipantLabelCentered gl-Market_General-cn1 ">
      <div class="srb-ParticipantLabelCentered_Name ">100</div>
    </div>
    <div class="srb-ParticipantLabelCentered gl-Market_General-cn1 ">
      <div class="srb-ParticipantLabelCentered_Name ">110</div>
    </div>
    <div class="srb-ParticipantLabelCentered gl-Market_General-cn1 ">
      <div class="srb-ParticipantLabelCentered_Name ">120</div>
    </div>
    <div class="srb-ParticipantLabelCentered gl-Market_General-cn1 ">
      <div class="srb-ParticipantLabelCentered_Name ">130</div>
    </div>
  </div>
  <div class="srb-Market375Wrapping gl-Market_General gl-Market_General-columnheader gl-Market_General-pwidth18-75 ">
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">1</span>
    </div>
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">2</span>
    </div>
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">3</span>
    </div>
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">1</span>
    </div>
  </div>
  <div class="srb-Market375Wrapping gl-Market_General gl-Market_General-columnheader gl-Market_General-pwidth18-75 ">
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">2</span>
    </div>
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">1</span>
    </div>
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">1</span>
    </div>
    <div class="gl-ParticipantOddsOnly gl-Participant_General gl-Market_General-cn1 ">
      <span class="gl-ParticipantOddsOnly_Odds">2</span>
    </div>
  </div>
</div>

我想找到包含与包含文本“110”的元素高度相同的文本“1”的元素

就像这张图片

【问题讨论】:

  • “它不起作用”你有错误吗?我认为您应该将 elementlist.append(location) 替换为 elementlist.append(elementlocation)
  • 您会看到 elementlistlist 的类型,而 list 对象没有名为 split 的属性。您需要做的是拆分列表中的每个元素。
  • 为什么要获取每个元素的 x,y 值?你打算用它做什么?即使是多次出现的元素也会有不同的位置......为什么要将它们分成 x,y 对?
  • @JeffC 我想将它们的 x、y 坐标与其他元素进行比较,并取决于列表中的一个元素的 y 坐标是否匹配以执行某项操作,如果不匹配则执行其他操作
  • 您是要处理表格行中的元素还是?我只是想了解您的情况,看看是否有更简单的方法。

标签: python selenium selenium-webdriver


【解决方案1】:

您没有说您的元素是什么,但考虑到它们是某个具有 location 属性的类的实例:

element_locations = [x,y for x,y in element.location.split(",") for element in elements]
# This is gonna be a list [(x1,y1), (x2,y2), ...,(xn,yn)] 

【讨论】:

    【解决方案2】:

    location

    location属性包含 WebElement 在可渲染画布中的位置,形式为dict.


    解决方案

    打印x,y您可以使用的元素的位置:

    print([element.location for element in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[text() ='100']")))])
    # outputs -> [{'x': 100, 'y': 367}, {'x': 100, 'y': 684}, {'x': 100, 'y': 684}, {'x': 100, 'y': 684}, {'x': 100, 'y': 1917}]
    

    仅打印坐标:

    print([(element.location['x'],element.location['y']) for element in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//span[text() ='100']")))])
    # outputs -> [(100, 367), (100, 684), (100, 684), (100, 684), (100, 1917)]
    

    可以在Selenium: get coordinates or dimensions of element with Python找到相关的详细讨论

    【讨论】:

    • 谢谢它的工作,但我仍然无法弄清楚如何将 x 和 y 坐标转换为单独的变量,以便我可以从列表中使用它们。所以我可以使用它们,就像列表中第一个元素的 x 等于一样。我尝试用 list = 替换 print,然后是 x1, y1 = list,但现在我得到了第一个元素的 x 和 y 坐标,除了 x 值
    • @ElBob x 和y 值采用dictionary 的形式。见Dictionary Methods
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    相关资源
    最近更新 更多