DrissionPage
1.元素定位
1.通过属性定位
e.g:tab.ele(@id=)
tab.ele(tag:input@@style=@@value=)
2.iframe定位
e.g:
frame = tab.get_frame(t:iframe);
ele = frame.ele()
frame = tab.eles(t:iframe)[];
3.相对定位
4.shadow_root的元素定位
先找到其父元素才能访问
ele1.shadow_root(“t: iframe”)
5.xpath定位(兼容性最好)
xpath= ‘x: ‘
page.ele(xpath)
2.元素属性
常用:save\link\atrr()
learning c language(4)
- 文本:以ascii形式储存(字符)
- 二进制:以二进制储存(文本编辑器中可能乱码)
ferro和feof用于当文件结束时,判断是读取失败还是遇到文件末尾。 符合则返回真。- 读取结束:文本
| 文本 | 二进制 |
|---|---|
返回值为eof/null |
返回值等于要读元素个数 |
Learning c language (2): files operations
一. 文件指针
被使用的文件会在内存开辟一个相应的信息区存放文件信息,保存在一个结构体变量中
FILE* pfFILE* fopen(const char* filename, const char* mode)文件打开;失败则返回NULL
| mode |
|---|
| “r” 阅读:打开输入作文件。文件必须存在。 |
| “w” 写道:为输出作创建一个空文件。如果已有同名文件存在,其内容被丢弃,该文件被视为新的空文件。 |
| “a” 附言:在文件结尾打开文件进行输出。输出作总是在文件末尾写入数据,进行扩展。重新定位作(fseek、fsetpos、rewind)被忽略。如果文件不存在,则该文件被创建。 |
| “r+” 阅读/更新:打开一个文件进行更新(包括输入和输出)。文件必须存在。 |
| “w+” 写作/更新:创建一个空文件并打开进行更新(包括输入和输出)。如果已有同名文件存在,其内容会被丢弃,该文件被视为新的空文件。 |
| “a+” 补充/更新:打开一个文件进行更新(包括输入和输出),所有输出作都写入文件末尾。重新定位作(fseek、fsetpos、rewind)会影响下一个输入作,但输出作会将位置移回文件末尾。如果文件不存在,则该文件被创建。 |
int fclose(FILE* stream)关闭文件;记得置空
markdown
1.iframe(html的一个元素)
iframe(内联框架)是HTML中的一个元素,用于在当前网页中嵌入另一个独立的HTML页面。它允许在主页面中创建一个子窗口,加载外部内容,如网页、视频、广告或文档。iframe的独立性使其成为实现内容隔离和跨域嵌入的常用工具。
iframe广泛应用于以下场景:
嵌入视频,如YouTube或Vimeo。
加载广告,确保广告内容与主页面隔离。
嵌入外部内容,如第三方应用或表单。
内嵌文档,如PDF或HTML文件。
实现跨域内容嵌入,但需注意安全限制。
iframe的核心属性
以下是iframe常用的属性及其功能:
<iframe src="https://example.com" width="600" height="400" title="示例"></iframe>
src:指定嵌入页面的URL。
width和height:设置iframe的宽度和高度。
sandbox:限制iframe的权限,如禁止脚本执行或表单提交。
allow:控制iframe的特殊功能,如全屏或摄像头访问。
loading:设置加载方式(lazy延迟加载或eager立即加载)。
Learning c language(1): dynamic memory management
一 相关函数
void* malloc(size_t byte): 开辟动态空间
e.g:int* a = (int*)malloc(40)void* calloc(size_t, size_t num )void* realloc(void* ptr, size_t byte ):重新分配
注意:如果空间开辟失败,则会返回NULL
二 规范流程
- realloc应用临时指针接收返回值 防止开辟失败导致NULL覆盖原指针;
- 要记得free释放空间并指针置空 避免内存泄漏和野指针;
三 柔性数组
1. 定义
柔性数组,也称为伸缩性数组成员,是C99标准中引入的一种结构体特性。它允许在结构体定义的最后一个元素声明一个未知大小的数组,使得结构体能够处理可变长度的数据。
柔性数组的定义通常如下所示:
struct st_type {
int i;
int a[]; // 柔性数组成员
};
在这个结构体中,a是一个柔性数组,它没有预定义的大小,这意味着数组a的大小可以在运行时确定。某些编译器支持int a[0]的写法,而有些则支持int a[]的写法,具体取决于编译器的实现。
2. 柔性数组的特点
柔性数组的使用具有以下几个特点:
结构体中柔性数组成员前必须至少有一个其他成员。
使用sizeof运算符计算包含柔性数组的结构体大小时,不包括柔性数组的内存。
为包含柔性数组的结构体动态分配内存时,分配的内存应该大于结构体的固定部分大小,以适应柔性数组的预期大小。
- 动态内存分配和内存释放
使用柔性数组时,通常需要通过malloc函数进行内存的动态分配。例如,如果需要在柔性数组a中存储10个int类型的元素,可以这样分配内存:
struct st_type *ps = (struct st_type*)malloc(sizeof(struct st_type) + 10 * sizeof(int));
这里,为结构体的固定部分分配了内存,并为柔性数组a预留了足够的空间。如果后续需要更多的空间,可以使用realloc函数来调整已分配内存的大小。
柔性数组的优点
柔性数组相比于使用指针的传统方式,有几个明显的优点:
内存管理简化:使用柔性数组可以在一次malloc调用中同时为结构体和附加的数组分配内存,这简化了内存管理过程,减少了内存泄漏的风险。
减少内存碎片:柔性数组有助于减少内存碎片,因为它允许连续的内存分配,这提高了内存的使用效率。
提高访问速度:连续的内存分配有助于提高数据访问速度。
实际应用
柔性数组在实际应用中非常有用,特别是在需要处理不定长数据的场景,如网络通信、文件处理等。它们使得结构体能够更加灵活地适应不同的数据长度,同时保持了代码的简洁性和高效性。
在使用柔性数组时,开发者需要注意正确地分配和释放内存,以避免内存泄漏或其他内存相关的错误。正确使用柔性数组可以显著提高程序的性能和可维护性。