Javascript PythonSelenium—从元素中的列表打印文本,该元素在下拉列表中滚动更新

Javascript PythonSelenium—从元素中的列表打印文本,该元素在下拉列表中滚动更新,javascript,jquery,python,css,selenium,Javascript,Jquery,Python,Css,Selenium,我使用Selenium和Python在用javascript更新的页面上的下拉菜单中获取公司名称列表。我可以点击nav按钮使公司名称列表可见,还可以打印前50行左右的文本 滚动列表时,子元素会异步更新。我一直不知道如何在参展商栏中找到滚动条上更新的公司名称 处理这个问题的最佳方法是什么 driver.get('https://www.expocad.com/host/fx/afassanoco/18csm/exfx.html') try: element = WebDriv

我使用Selenium和Python在用javascript更新的页面上的下拉菜单中获取公司名称列表。我可以点击nav按钮使公司名称列表可见,还可以打印前50行左右的文本

滚动列表时,
子元素会异步更新。我一直不知道如何在参展商栏中找到滚动条上更新的公司名称

处理这个问题的最佳方法是什么

driver.get('https://www.expocad.com/host/fx/afassanoco/18csm/exfx.html')
    try:
       element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "nav-btn")))
       if element:
           driver.find_element_by_class_name('nav-btn').click() 
    finally:
       table = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "exhGrid")))
       if table:
           print(driver.find_element_by_class_name('slick-viewport').text)

提前谢谢

您可以找到元素并通过Javascript触发滚动事件。等待加载其他名称,然后您应该能够以与读取前50个名称相同的方式读取它们:

driver.executeScript("document.getElementById('SOME_SELECTOR').scrollDown += 100");
不确定是否需要在网格画布或平滑视口中滚动,但应该找到一些选择器,让您可以在其中获取滚动事件。如果这不起作用,你也可以试试

driver.execute_script('scrollBy(0, 250)')
或发送
键。向下箭头
事件


无论哪种方式,您都可以将其保留到列表底部。

您可以找到元素并通过Javascript触发滚动事件。等待加载其他名称,然后您应该能够以与读取前50个名称相同的方式读取它们:

driver.executeScript("document.getElementById('SOME_SELECTOR').scrollDown += 100");
不确定是否需要在网格画布或平滑视口中滚动,但应该找到一些选择器,让您可以在其中获取滚动事件。如果这不起作用,你也可以试试

driver.execute_script('scrollBy(0, 250)')
或发送
键。向下箭头
事件


不管是哪种方式,你都可以一直保持这种状态,直到你排到列表的底部。

我认为硒元素对于这项任务来说是过火了。您只需下载XML文件:

并对其进行分析:

import xml.etree.ElementTree as ET
tree = ET.parse("18csm.xml")

for selem in tree.getroot().iter('S'):
    company_no = None
    company_name = []
    for telem in selem.iter('T'):
        if company_no == None:
            company_no = telem.attrib['v']
        else:
            company_name.append(telem.attrib['v'])
    if company_name != []:
        print(company_no, " ".join(company_name))

我认为硒元素对于这项任务来说是杀伤力过大了。您只需下载XML文件:

并对其进行分析:

import xml.etree.ElementTree as ET
tree = ET.parse("18csm.xml")

for selem in tree.getroot().iter('S'):
    company_no = None
    company_name = []
    for telem in selem.iter('T'):
        if company_no == None:
            company_no = telem.attrib['v']
        else:
            company_name.append(telem.attrib['v'])
    if company_name != []:
        print(company_no, " ".join(company_name))

谢谢-从未想过采取这种方法。谢谢你!谢谢-从未想过采取这种方法。谢谢你!