?一定位到iframe有四种方法
1.page.frame_locator(selector) #返回的是FrameLocator
2.page.frame() # 可以传递iframe的name属性值或者是id属性值,或者是url属性值
2.1如果iframe有name的属性值或者id的属性值可以如下面一样传递
page.frame(name=name的属性或者id的属性)
2.2如果iframe有url的属性值,可以如下面一样传递
page.frame(url=url的属性值)
2.3page.frame的返回的是Frame的对象,可以调用如下的方法和属性
Frame.name
Frame.url
Frame.evaluate()
Frame.content()
3.page.query_selector(selector).content_frame() #通过query_selector方式,定位到元素,转成frame 对象(不太常用)
4.page.locator(selector).frame_locator(selector) #通过page对象定位某个父元素,通过locator定位frame_locator(selector)
二.关于frame的属性
1.page.frames 获取page对象的全部iframe,包含page本身的frame对象
2.page.main_frame 获取page的main_frame (page对象本身也是一个frame对象)
3.frame.child_frames 获取frame下的全部子 frame 对象
三.page.frame_locator()可以用css的正则匹配元素属性
css的正则匹配
语法 | 描述 |
---|---|
$('[name^="value"]') | 匹配 name 以 value 开头的元素 |
$('[name$="end"]') | 匹配 name 以 end 结尾的元素 |
$('[class*="text"]') | 匹配class属性包含text的元素 |
四.获取所有文本内容的js代码
alltext = frameobj.evaluate('document.body.textContent') # frameobj是定位到的frame对象
alltext就是获取到的frame里面的所有文本内容,但是会有空格和换行,可以通过正则匹配去除掉。
# 以下函数可以把alltext里面的空格和换行替换掉
def remove_newline_space(alltext):
pattern = r'\s*\n+\s*'
# alltext符合条件的内容替换成空字符,也可以替换成|或者其他的
alltext_new = re.sub(pattern,'',alltext)
return alltext_new