Python中Selenium返回的元素位置和大小错误

dl5txlt9  于 2023-01-26  发布在  Python
关注(0)|答案(1)|浏览(177)

我试图在网页中查找表格的位置,但没有表格的ID/XPATH/CLASSNAME。我使用的是所需表格与网页中表格之间的相似性。当我使用element.size/element.location时,表格的位置和大小不正确。下面的任何解决方案或任何操作是否有误:

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(URL)
fn = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
driver.set_window_size(1024, fn('Height'))
driver.save_screenshot("sample.png")
tables = driver.find_elements(By.TAG_NAME,"table")
for table in tables:
   table_str = table.get_attribute("innerHTML")
   similarity_tables = similarity(my_table_words,table_str)
   if(similarity_tables>90):
       th = table.size['height']
       tw = table.size['width']
       tx = table.location['x']
       ty = table.location['y']

使用这段代码,我可以找到正确/所需的表,但返回的元素的位置和大小不正确。

g6ll5ycj

g6ll5ycj1#

我想装表花了很长时间。
因为Selenium是一个动态的网页自动化框架,它可以解决这个问题。
我告诉你我的诀窍。

睡眠时间()

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(URL)
fn = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
driver.set_window_size(1024, fn('Height'))
time.sleep(10) # <------------------------------------------------
driver.save_screenshot("sample.png")
tables = driver.find_elements(By.TAG_NAME,"table")
for table in tables:
   table_str = table.get_attribute("innerHTML")
   similarity_tables = similarity(my_table_words,table_str)
   if(similarity_tables>90):
       time.sleep(10) # <------------------------------------------------
       th = table.size['height']
       tw = table.size['width']
       tx = table.location['x']
       ty = table.location['y']

位置_once_scrolled_into_view

在尝试获取表的位置和大小之前,可以尝试将页滚动到表。
x一个一个一个一个x一个一个二个x

使用非无头模式

您应该知道,headless浏览器中元素的locationsize可能与非headless浏览器中的不同。

chrome_options = Options()
## remove
# chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get(URL)
fn = lambda X: driver.execute_script('return document.body.parentNode.scroll' + X)
driver.set_window_size(1024, fn('Height'))
driver.save_screenshot("sample.png")
tables = driver.find_elements(By.TAG_NAME,"table")
for table in tables:
   table_str = table.get_attribute("innerHTML")
   similarity_tables = similarity(my_table_words,table_str)
   if(similarity_tables>90):
       th = table.size['height']
       tw = table.size['width']
       tx = table.location['x']
       ty = table.location['y']

∮尽你所能∮
如果您已经使用了所有方法,但它们都不起作用,请尝试在自己提取大小的同时调整它们。
希望这个有用。

相关问题