Javascript PythonSelenium—从元素中的列表打印文本,该元素在下拉列表中滚动更新
我使用Selenium和Python在用javascript更新的页面上的下拉菜单中获取公司名称列表。我可以点击nav按钮使公司名称列表可见,还可以打印前50行左右的文本 滚动列表时,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
子元素会异步更新。我一直不知道如何在参展商栏中找到滚动条上更新的公司名称
处理这个问题的最佳方法是什么
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))
谢谢-从未想过采取这种方法。谢谢你!谢谢-从未想过采取这种方法。谢谢你!