別のスクリプト(私が制御していない)が生成するページで、リンク内のリンクテキストの色を黄色に変更しようとしています。具体的には、このページの2つの表で特定のテキストを検索しています。テキスト(ハイパーリンク)を見つけたら、色を黄色に変更したいと思います。
HTML :: Elementを使用していて、テキストを簡単に見つけることができます。問題は、リンクの色が指定されていないため、リンクがデフォルト値の青を使用していることです。フォントカラーのHTML要素をタグに追加しようとしていますが、うまくいきません。
次のようなものを使用しようとすると(「$ a」は、編集しようとしているリンクのHTML :: Elementオブジェクトです):
$a->attr("font color", "yellow");
属性を追加しますが、リンクコンテンツのテキストの色は変更しません。
私が次のようなことを試みた場合:
my $content = $a->content;
$content->attr("font color", "yellow");
テキストを追加するだけです
<font color=yellow>
繰り返しになりますが、実際のコンテンツのテキストの色を変更せずにコンテンツに追加します。
それをつなぎ合わせようとしても機能しません。
私はついにこれにぶつかった:
my $yellowFont = HTML::Element->new('font', 'color' => 'yellow');
foreach my $item_ref ($a->content_refs_list) {
next if ref $$item_ref;
$yellowFont->push_content($$item_ref);
}
print $yellowFont->as_HTML, "\n";
それが作成するという意味で美しく機能します:
<font color="yellow">201301022150-Job5</font>
しかし、その変更はhtmlドキュメントには反映されていません。
フォントの色属性を元のhtmlドキュメントに挿入する方法がわかりません。
以下は私のスクリプト全体です。私はさまざまな方法を試してきましたが成功しなかったので、それは混乱です。
#!/usr/local/bin/perl
use warnings;
use strict;
use HTML::TableExtract qw(tree);
use Data::Dumper qw(Dumper);
my @jobList = ();
if ($ARGV[0]) {@jobList = $ARGV[0];} else {die ("Need list of jobs as argument\n")};
my $ddHTMLFile = "./tmp_aptg";
my $te1 = HTML::TableExtract->new( depth => 1, count => 0);
my $te2 = HTML::TableExtract->new( depth => 1, count => 1);
$te1->parse_file($ddHTMLFile);
$te2->parse_file($ddHTMLFile);
my $table1 = $te1->first_table_found;
my $table2 = $te2->first_table_found;
my $table1_tree = $table1->tree;
my $table2_tree = $table2->tree;
foreach my $a ($table1_tree->find_by_tag_name("a")) {
my $href = $a->attr("href");
if ($href =~ m/$jobList[0]/) {
my $yellowFont = HTML::Element->new('font', 'color' => 'yellow');
foreach my $item_ref ($a->content_refs_list) {
next if ref $$item_ref;
$yellowFont->push_content($$item_ref);
}
#print $yellowFont->as_HTML, "\n";
$a->replacewith
$a->dump;
#my $table1_html = $table1_tree->as_HTML;
#my $document1_tree = $te1->tree;
#my $document1_html = $document1_tree->as_HTML;
#my $document_html = $document1_html;
#print "$document_html";
}
}